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