On 21/02/2019 06:55, Glyph wrote:
The methods being hooked don't necessarily return deferreds.
Glyph, this bit ^^^
I'd like it to be an explicit choice of the caller, ie:
result = yield SomeProtocol.onMessage.called() # okay, we got here, we know onMessage was called, # now we might want to tick a clock, or otherwise simulate # async state manipulation. # now I want to make sure the deferred chain on the onMessage result has been completed: yield result
I'm not sure I understand your example here.
Yeah, this is part of carly, that I posted earlier. It stems from the need to get the results of method calls when you have no reference to the object being calls, or sometimes a result that's a deferred you need to wait on, particularly in a test, but have no way of doing so. If you're feeling brave, have a read of: https://github.com/cjw296/carly/blob/master/carly/hook.py
The assertion in question only happens if you call returnValue or do a return with a Deferred directly; this example doesn't do either of those things.
This is the test situation where I hit this issue: https://github.com/cjw296/carly/blob/master/tests/test_untracked_deferred.py... I'd originally wanted to have that read: @inlineCallbacks def test1(self): ... result = yield pita.asyncMethod.called() with ShouldRaise(Exception(1)): yield result Now, which I'm actually happier with the end result here, I think the above it legit, if unusual, and that assert trips it up. cheers, Chris