On Fri, 2016-07-29 at 23:11 +0400, meejah wrote:
I think the "recommended" way to get access to a reactor instance is to pass it in to methods that require it.
While this can sometimes seem tedious it a) helps testing (because now you can easily pass a fake reactor object like Clock or a Mock instance) and b) shows you (and your users) which methods are (or might-be) async.
So, try a signature like "def terrific_method(reactor):" instead. Now when you're writing tests, you can do this:
fake_reactor = Clock() d = terrific_method(fake_reactor) fake_reactor.advance(2) # etc.
Ah yes, you answered a question of mine not so long ago earlier and told me exactly that....sorry forgot.
workig example if anybody ever digs this out:
i modified the code like this:
working_code.py from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
@inlineCallbacks def print_it(reactor): arg = yield terrific_method(reactor) print arg
@inlineCallbacks def terrific_method(reactor): d = Deferred() reactor.callLater(2, d.callback, 2) result = yield d returnValue(result)
if __name__ == '__main__': import qt5reactor qt5reactor.install() from twisted.internet import reactor reactor.callWhenRunning(print_it, reactor) reactor.run()
main_code.py: import qt5reactor qt5reactor.install()
from twisted.internet import reactor from working_code import print_it
now on to some tests...