Quoting Lenny G Arbage firstname.lastname@example.org:
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 -- 'fireOnErrbackAfterAllCompleted=True'?
Well that's near the default behaviour with fireOnOneErrback=False. Don't forget you have the status of each requests in the result list. You could something like this :
d = DeferredList(myList) d.addCallback(mycb)
def mycb(results): ret =  # Warning clumsy code for code, res in results: if code == defer.FAILURE: # or 'not code' return failure.Failure(res) else: # defer.SUCCESS ret.append(res) return ret
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 result list, if you're actually raising an Exception for *one* error.