core (tools): “DelayedDeferred” implementation, which is a Deferred launched after a delay
This commit is contained in:
parent
45d040d8c6
commit
6a84960811
1 changed files with 42 additions and 0 deletions
|
|
@ -23,6 +23,8 @@ from sat.core.log import getLogger
|
|||
log = getLogger(__name__)
|
||||
from sat.core import exceptions
|
||||
from twisted.internet import defer
|
||||
from twisted.internet import error as internet_error
|
||||
from twisted.internet import reactor
|
||||
from twisted.python import failure
|
||||
from sat.core.constants import Const as C
|
||||
from sat.memory import memory
|
||||
|
|
@ -31,6 +33,46 @@ KEY_DEFERREDS = 'deferreds'
|
|||
KEY_NEXT = 'next_defer'
|
||||
|
||||
|
||||
class DelayedDeferred(object):
|
||||
"""A Deferred-like which is launched after a delay"""
|
||||
|
||||
def __init__(self, delay, result):
|
||||
"""
|
||||
@param delay(float): delay before launching the callback, in seconds
|
||||
@param result: result used with the callback
|
||||
"""
|
||||
self._deferred = defer.Deferred()
|
||||
self._timer = reactor.callLater(delay, self._deferred.callback, result)
|
||||
|
||||
def cancel(self):
|
||||
try:
|
||||
self._timer.cancel()
|
||||
except internet_error.AlreadyCalled:
|
||||
pass
|
||||
self._deferred.cancel()
|
||||
|
||||
def addCallbacks(self, *args, **kwargs):
|
||||
self._deferred.addCallbacks(*args,**kwargs)
|
||||
|
||||
def addCallback(self, *args, **kwargs):
|
||||
self._deferred.addCallback(*args,**kwargs)
|
||||
|
||||
def addErrback(self, *args, **kwargs):
|
||||
self._deferred.addErrback(*args,**kwargs)
|
||||
|
||||
def addBoth(self, *args, **kwargs):
|
||||
self._deferred.addBoth(*args,**kwargs)
|
||||
|
||||
def chainDeferred(self, *args, **kwargs):
|
||||
self._deferred.chainDeferred(*args,**kwargs)
|
||||
|
||||
def pause(self):
|
||||
self._deferred.pause()
|
||||
|
||||
def unpause(self):
|
||||
self._deferred.unpause()
|
||||
|
||||
|
||||
class RTDeferredSessions(memory.Sessions):
|
||||
"""Real Time Deferred Sessions"""
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue