1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 __doc__='''Chain
16
17 Chain a series of deferred actions serially.
18
19 $Id$
20 '''
21
22 __version__ = "$Revision$"[11:-2]
23
24
25
26 from twisted.internet import defer
27
29 """Call a function over an interable of data, after each finishes."""
30
32 self.callable = callable
33 self.iterable = iterable
34 self.results = []
35 self.defer = defer.Deferred()
36
40
42 "run the next step"
43 try:
44 next = self.iterable.next()
45 self.callable(next).addCallbacks(self.success, self.failure)
46 except StopIteration:
47 self.defer.callback(self.results)
48 except Exception, ex:
49 self.failure(ex)
50
52 "gather a successful result"
53 self.results.append((True, result))
54 self.next()
55
57 "gather an error result"
58 self.results.append((False, result))
59 self.next()
60