]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/util/deferredutil.py
a1767417e58659e4c380b5973999ebf623876ad9
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / util / deferredutil.py
1 from twisted.internet import defer
2
3 # utility wrapper for DeferredList
4 def _check_deferred_list(results):
5     # if any of the component Deferreds failed, return the first failure such
6     # that an addErrback() would fire. If all were ok, return a list of the
7     # results (without the success/failure booleans)
8     for success,f in results:
9         if not success:
10             return f
11     return [r[1] for r in results]
12 def DeferredListShouldSucceed(dl):
13     d = defer.DeferredList(dl)
14     d.addCallback(_check_deferred_list)
15     return d
16
17 def _parseDListResult(l):
18     return [x[1] for x in l]
19
20 def _unwrapFirstError(f):
21     f.trap(defer.FirstError)
22     raise f.value.subFailure
23
24 def gatherResults(deferredList):
25     """Returns list with result of given Deferreds.
26
27     This builds on C{DeferredList} but is useful since you don't
28     need to parse the result for success/failure.
29
30     @type deferredList:  C{list} of L{Deferred}s
31     """
32     d = defer.DeferredList(deferredList, fireOnOneErrback=True, consumeErrors=True)
33     d.addCallbacks(_parseDListResult, _unwrapFirstError)
34     return d
35