[Twisted-Python] Re: Making DeferredList look like Deferred
therve at free.fr
Mon Feb 6 15:35:27 EST 2006
Quoting Lenny G Arbage <alengarbage at yahoo.com>:
> Now, though, this leads me to one more question:
> what if I want to wait until all the Deferreds have
> fired (either err or callback), and only then call the
> callback if all callbacks were fired, otherwise call
> the errback?
> To accomplish this, I'm currently just 'wrapping'
> the DeferredList in a regular Deferred. It's callback
> is always called on completion, so when it fires I
> look at all the results given to the callback, and if
> any have failed, raise an exception. Otherwise I
> return a result.
> This feels a little bit clunky, but I don't have a
> good suggestion for improving it --
Well that's near the default behaviour with fireOnOneErrback=False.
you have the status of each requests in the result list. You could something
like this :
d = DeferredList(myList)
ret = 
# Warning clumsy code
for code, res in results:
if code == defer.FAILURE: # or 'not code'
else: # defer.SUCCESS
But really, I don't see the point of this. If you want to have an exception
somewhere, use fireOnOneErrback. Else there's no need to build the
if you're actually raising an Exception for *one* error.
More information about the Twisted-Python