2
from twisted.python import failure
3
from twisted.internet import defer
6
if isinstance(self.result, failure.Failure):
7
self.result.raiseException()
11
def _deferGenerator(g, deferred=None):
13
See L{waitForDeferred}.
18
deferred = defer.Deferred()
22
deferred.callback(result)
28
# Deferred.callback(Deferred) raises an error; we catch this case
29
# early here and give a nicer error message to the user in case
30
# they yield a Deferred. Perhaps eventually these semantics may
32
if isinstance(result, defer.Deferred):
33
return defer.fail(TypeError("Yield waitForDeferred(d), not d!"))
35
if isinstance(result, defer.waitForDeferred):
36
waiting = [True, None]
37
# Pass vars in so they don't get changed going around the loop
38
def gotResult(r, waiting=waiting, result=result):
44
_deferGenerator(g, deferred)
45
result.d.addBoth(gotResult)
47
# Haven't called back yet, set flag so that we get reinvoked
48
# and return from the loop
51
result = None # waiting[1]
55
getResult.__module__ = 'twisted.internet.defer'
56
defer.waitForDeferred.getResult = getResult
58
_deferGenerator.__module__ = 'twisted.internet.defer'
59
defer._deferGenerator = _deferGenerator