mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-23 14:52:26 +00:00
testutil.PollMixin: use a custom exception (and convert it) to avoid the ugly 'stash' cycle
This commit is contained in:
parent
8f2410cd30
commit
bab799297f
@ -41,6 +41,9 @@ class SignalMixin:
|
|||||||
class TimeoutError(Exception):
|
class TimeoutError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class PollComplete(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
class PollMixin:
|
class PollMixin:
|
||||||
|
|
||||||
def poll(self, check_f, pollinterval=0.01, timeout=None):
|
def poll(self, check_f, pollinterval=0.01, timeout=None):
|
||||||
@ -48,22 +51,24 @@ class PollMixin:
|
|||||||
# True, at which point the Deferred will fire.. If check_f raises an
|
# True, at which point the Deferred will fire.. If check_f raises an
|
||||||
# exception, the Deferred will errback. If the check_f does not
|
# exception, the Deferred will errback. If the check_f does not
|
||||||
# indicate success within timeout= seconds, the Deferred will
|
# indicate success within timeout= seconds, the Deferred will
|
||||||
# errback. If timeout=None, no timeout will be enforced.
|
# errback. If timeout=None, no timeout will be enforced, and the loop
|
||||||
|
# will poll forever (or really until Trial times out).
|
||||||
cutoff = None
|
cutoff = None
|
||||||
if timeout is not None:
|
if timeout is not None:
|
||||||
cutoff = time.time() + timeout
|
cutoff = time.time() + timeout
|
||||||
stash = [] # ick. We have to pass the LoopingCall into itself
|
lc = task.LoopingCall(self._poll, check_f, cutoff)
|
||||||
lc = task.LoopingCall(self._poll, check_f, stash, cutoff)
|
|
||||||
stash.append(lc)
|
|
||||||
d = lc.start(pollinterval)
|
d = lc.start(pollinterval)
|
||||||
|
def _convert_done(f):
|
||||||
|
f.trap(PollComplete)
|
||||||
|
return None
|
||||||
|
d.addErrback(_convert_done)
|
||||||
return d
|
return d
|
||||||
|
|
||||||
def _poll(self, check_f, stash, cutoff):
|
def _poll(self, check_f, cutoff):
|
||||||
if cutoff is not None and time.time() > cutoff:
|
if cutoff is not None and time.time() > cutoff:
|
||||||
raise TimeoutError()
|
raise TimeoutError()
|
||||||
lc = stash[0]
|
|
||||||
if check_f():
|
if check_f():
|
||||||
lc.stop()
|
raise PollComplete()
|
||||||
|
|
||||||
class StallMixin:
|
class StallMixin:
|
||||||
def stall(self, res=None, delay=1):
|
def stall(self, res=None, delay=1):
|
||||||
|
Loading…
Reference in New Issue
Block a user