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, max_retries=None):
15 @retry('Error getting block:', 1)
16 @defer.inlineCallbacks
22 @defer.inlineCallbacks
23 def f(*args, **kwargs):
24 for i in itertools.count():
26 result = yield func(*args, **kwargs)
30 log.err(None, message)
33 defer.returnValue(result)
37 class ReplyMatcher(object):
39 Converts request/got response interface to deferred interface
42 def __init__(self, func, timeout=5):
44 self.timeout = timeout
47 def __call__(self, id):
48 if id not in self.map:
52 self.map[id].remove((df, timer))
55 df.errback(failure.Failure(defer.TimeoutError('in ReplyMatcher')))
56 timer = reactor.callLater(self.timeout, timeout)
57 self.map.setdefault(id, set()).add((df, timer))
60 def got_response(self, id, resp):
61 if id not in self.map:
63 for df, timer in self.map.pop(id):