aboutsummaryrefslogtreecommitdiff
path: root/src/Timers.py
diff options
context:
space:
mode:
authorGravatar jesopo2019-10-08 13:49:43 +0100
committerGravatar jesopo2019-10-08 13:49:55 +0100
commit7a5edccb982a9aa3d1d1557d5928d03046bda29e (patch)
treecfa252ad88198d0ff2f8fd593916818e373789b9 /src/Timers.py
parentrefactor anything that effects event poll timeout in to PollHook objects (diff)
signature
transient timers shouldn't use the event system
Diffstat (limited to 'src/Timers.py')
-rw-r--r--src/Timers.py32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/Timers.py b/src/Timers.py
index e74d4a53..f913b781 100644
--- a/src/Timers.py
+++ b/src/Timers.py
@@ -1,9 +1,12 @@
import time, typing, uuid
from src import Database, EventManager, Logging, PollHook
+T_CALLBACK = typing.Callable[["Timer"], None]
+
class Timer(object):
def __init__(self, id: str, context: typing.Optional[str], name: str,
- delay: float, next_due: typing.Optional[float], kwargs: dict):
+ delay: float, next_due: typing.Optional[float], kwargs: dict,
+ callback: T_CALLBACK):
self.id = id
self.context = context
self.name = name
@@ -13,6 +16,7 @@ class Timer(object):
else:
self.set_next_due()
self.kwargs = kwargs
+ self.callback = callback
self._done = False
def set_next_due(self):
@@ -64,17 +68,24 @@ class Timers(PollHook.PollHook):
self.timers.remove(timer)
self.database.bot_settings.delete("timer-%s" % timer.id)
- def add(self, name: str, delay: float, next_due: float=None, **kwargs
- ) -> Timer:
- return self._add(None, name, delay, next_due, None, False, kwargs)
+ def add(self, name: str, callback: T_CALLBACK, delay: float,
+ next_due: float=None, **kwargs) -> Timer:
+ return self._add(None, name, delay, next_due, None, False, kwargs,
+ callback=callback)
def add_persistent(self, name: str, delay: float, next_due: float=None,
**kwargs) -> Timer:
return self._add(None, name, delay, next_due, None, True, kwargs)
def _add(self, context: typing.Optional[str], name: str, delay: float,
next_due: typing.Optional[float], id: typing.Optional[str],
- persist: bool, kwargs: dict) -> Timer:
+ persist: bool, kwargs: dict, callback: T_CALLBACK=None) -> Timer:
id = id or str(uuid.uuid4())
- timer = Timer(id, context, name, delay, next_due, kwargs)
+
+ if not callback:
+ callback = lambda timer: self.events.on("timer.%s" % name).call(
+ timer=timer, **kwargs)
+
+ timer = Timer(id, context, name, delay, next_due, kwargs,
+ callback=callback)
if persist:
self._persist(timer)
@@ -110,8 +121,7 @@ class Timers(PollHook.PollHook):
for timer in self.get_timers():
if timer.due():
timer.finish()
- self.events.on("timer.%s" % timer.name).call(timer=timer,
- **timer.kwargs)
+ timer.callback(timer)
if timer.done():
self._remove(timer)
@@ -123,10 +133,10 @@ class TimersContext(object):
def __init__(self, parent: Timers, context: str):
self._parent = parent
self.context = context
- def add(self, name: str, delay: float, next_due: float=None,
- **kwargs) -> Timer:
+ def add(self, name: str, callback: T_CALLBACK, delay: float,
+ next_due: float=None, **kwargs) -> Timer:
return self._parent._add(self.context, name, delay, next_due, None,
- False, kwargs)
+ False, kwargs, callback=callback)
def add_persistent(self, name: str, delay: float, next_due: float=None,
**kwargs) -> Timer:
return self._parent._add(None, name, delay, next_due, None, True,