1 from __future__ import division
3 from twisted.internet import defer, reactor
4 from twisted.python import failure, log
8 reactor.callLater(t, d.callback, None)
11 def retry(message, delay):
13 @retry('Error getting block:', 1)
14 @defer.inlineCallbacks
20 @defer.inlineCallbacks
21 def f(*args, **kwargs):
24 result = yield func(*args, **kwargs)
26 log.err(None, message)
29 defer.returnValue(result)
33 class ReplyMatcher(object):
35 Converts request/got response interface to deferred interface
38 def __init__(self, func, timeout=5):
40 self.timeout = timeout
43 def __call__(self, id):
44 if id not in self.map:
48 self.map[id].remove((df, timer))
51 df.errback(failure.Failure(defer.TimeoutError('in ReplyMatcher')))
52 timer = reactor.callLater(self.timeout, timeout)
53 self.map.setdefault(id, set()).add((df, timer))
56 def got_response(self, id, resp):
57 if id not in self.map:
59 for df, timer in self.map.pop(id):