1 from __future__ import division
5 from twisted.internet import defer, reactor
6 from twisted.python import failure, log
10 reactor.callLater(t, d.callback, None)
13 def retry(message, delay):
15 @retry('Error getting block:', 1)
16 @defer.inlineCallbacks
22 @defer.inlineCallbacks
23 def f(*args, **kwargs):
26 result = yield func(*args, **kwargs)
28 log.err(None, message)
31 defer.returnValue(result)
35 class ReplyMatcher(object):
37 Converts request/got response interface to deferred interface
40 def __init__(self, func, timeout=5):
42 self.timeout = timeout
45 def __call__(self, id):
47 uniq = random.randrange(2**256)
50 df, timer = self.map[id].pop(uniq)
51 df.errback(failure.Failure(defer.TimeoutError('in ReplyMatcher')))
54 self.map.setdefault(id, {})[uniq] = (df, reactor.callLater(self.timeout, timeout))
57 def got_response(self, id, resp):
58 if id not in self.map:
60 for df, timer in self.map.pop(id).itervalues():