1
2
3
4
5
6
7
8
9
10
11
12
13 from twisted.internet import reactor
14 from twisted.internet import defer
15
17 """A deferred that fires errback if the result doesn't come
18 back in the given time period"""
19
20 timer = None
21
23 """Wrap the passed deferred and return a new deferred that
24 will timeout
25
26 @type other: a Deferred
27 @param other: the deferred to wrap
28 @type timeout: floating point number
29 @param timeout: time, in seconds, to wait before failing the deferred
30 """
31 defer.Deferred.__init__(self)
32 self.timer = reactor.callLater(timeout, self._timeout)
33 other.chainDeferred(self)
34
36 "The wrapped deferred was too slow: fire the errback"
37 if not self.called:
38 self.timer = None
39 self.errback(defer.TimeoutError())
40
48
49 -def timeout(deferred, timeInSeconds):
50 "Utility method to wrap a deferred to timeout in timeInSeconds"
51 return TimeoutDeferred(deferred, timeInSeconds)
52