43 lines
1.3 KiB
Python

import base
class Timers(base.Base):
def initialize(self):
if(getattr(super(), 'initialize', False)):
super().initialize()
self._timers = {}
functions = [
'run_in',
'run_once',
'run_at',
'run_daily',
'run_hourly',
'run_minutely',
'run_every',
'run_at_sunrise',
'run_at_sunset',
]
for f in functions:
self._override(f)
setattr(self, '_cancel_timer', super().cancel_timer)
def cancel_timer(self, name, *args, **kwargs):
if type(name) is str:
if name in self._timers:
return super(Timers, self).cancel_timer(self._timers[name])
else:
return super(Timers, self).cancel_timer(*args, **kwargs)
def _override(self, f):
setattr(self, f'_{f}', getattr(self, f))
def fn(name, *args, **kwargs):
if type(name) is str:
if name in self._timers:
super(Timers, self).cancel_timer(self._timers[name])
self._timers[name] = getattr(self, f'_{f}')(*args, **kwargs)
return self._timers[name]
else:
return getattr(self, f'_{f}')(name, *args, **kwargs)
setattr(self, f, fn)