core (tools): “DelayedDeferred” implementation, which is a Deferred launched after a delay

This commit is contained in:
Goffi 2015-11-02 22:02:41 +01:00
commit 6a84960811

View file

@ -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"""