From e07553c3627b80f20cdc81a35030bf0540924db8 Mon Sep 17 00:00:00 2001 From: jesopo Date: Tue, 30 Oct 2018 14:58:48 +0000 Subject: Add type/return hints throughout src/ and, in doing so, fix some cyclical references. --- src/Timers.py | 62 +++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 27 deletions(-) (limited to 'src/Timers.py') diff --git a/src/Timers.py b/src/Timers.py index e49e7edc..c3336d87 100644 --- a/src/Timers.py +++ b/src/Timers.py @@ -1,7 +1,9 @@ -import time, uuid +import time, typing, uuid +from src import Database, EventManager, Logging class Timer(object): - def __init__(self, id, context, name, delay, next_due, kwargs): + def __init__(self, id: int, context: str, name: str, delay: float, + next_due: float, kwargs: dict): self.id = id self.context = context self.name = name @@ -15,9 +17,9 @@ class Timer(object): def set_next_due(self): self.next_due = time.time()+self.delay - def due(self): + def due(self) -> bool: return self.time_left() <= 0 - def time_left(self): + def time_left(self) -> float: return self.next_due-time.time() def redo(self): @@ -25,42 +27,33 @@ class Timer(object): self.set_next_due() def finish(self): self._done = True - def done(self): + def done(self) -> bool: return self._done -class TimersContext(object): - def __init__(self, parent, context): - self._parent = parent - self.context = context - def add(self, name, delay, next_due=None, **kwargs): - self._parent._add(self.context, name, delay, next_due, None, False, - kwargs) - def add_persistent(self, name, delay, next_due=None, **kwargs): - self._parent._add(None, name, delay, next_due, None, True, - kwargs) - class Timers(object): - def __init__(self, database, events, log): + def __init__(self, database: Database.Database, + events: EventManager.EventHook, + log: Logging.Log): self.database = database self.events = events self.log = log self.timers = [] self.context_timers = {} - def new_context(self, context): + def new_context(self, context: str) -> "TimersContext": return TimersContext(self, context) - def setup(self, timers): + def setup(self, timers: typing.List[typing.Tuple[str, dict]]): for name, timer in timers: id = name.split("timer-", 1)[1] self._add(timer["name"], None, timer["delay"], timer[ "next-due"], id, False, timer["kwargs"]) - def _persist(self, timer): + def _persist(self, timer: Timer): self.database.bot_settings.set("timer-%s" % timer.id, { "name": timer.name, "delay": timer.delay, "next-due": timer.next_due, "kwargs": timer.kwargs}) - def _remove(self, timer): + def _remove(self, timer: Timer): if timer.context: self.context_timers[timer.context].remove(timer) if not self.context_timers[timer.context]: @@ -69,11 +62,13 @@ class Timers(object): self.timers.remove(timer) self.database.bot_settings.delete("timer-%s" % timer.id) - def add(self, name, delay, next_due=None, **kwargs): + def add(self, name: str, delay: float, next_due: float=None, **kwargs): self._add(None, name, delay, next_due, None, False, kwargs) - def add_persistent(self, name, delay, next_due=None, **kwargs): + def add_persistent(self, name: str, delay: float, next_due: float=None, + **kwargs): self._add(None, name, delay, next_due, None, True, kwargs) - def _add(self, context, name, delay, next_due, id, persist, kwargs): + def _add(self, context: str, name: str, delay: float, next_due: float, + id: str, persist: bool, kwargs: dict): id = id or uuid.uuid4().hex timer = Timer(id, context, name, delay, next_due, kwargs) if persist: @@ -86,13 +81,13 @@ class Timers(object): else: self.timers.append(timer) - def next(self): + def next(self) -> float: times = filter(None, [timer.time_left() for timer in self.get_timers()]) if not times: return None return max(min(times), 0) - def get_timers(self): + def get_timers(self) -> typing.List[Timer]: return self.timers + sum(self.context_timers.values(), []) def call(self): @@ -104,6 +99,19 @@ class Timers(object): if timer.done(): self._remove(timer) - def purge_context(self, context): + def purge_context(self, context: str): if context in self.context_timers: del self.context_timers[context] + +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): + self._parent._add(self.context, name, delay, next_due, None, False, + kwargs) + def add_persistent(self, name: str, delay: float, next_due: float=None, + **kwargs): + self._parent._add(None, name, delay, next_due, None, True, + kwargs) -- cgit v1.3.1-10-gc9f91