create looping timer
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Torma Kristóf 2020-08-24 20:58:26 +02:00
parent 0956477831
commit 5d9e815407
Signed by: tormakris
GPG Key ID: DC83C4F2C41B1047
3 changed files with 71 additions and 1 deletions

View File

@ -29,3 +29,14 @@ if config.SENTRY_DSN:
_experiments={"auto_enabling_integrations": True}
)
def main():
"""
Main function
:return:
"""
pass
if __name__ == "__main__":
main()

59
src/utils/loopingtimer.py Normal file
View File

@ -0,0 +1,59 @@
#!/usr/bin/env python3
from threading import Timer
"""
Timer module that looptydoops the entire software
"""
__author__ = "@tormakris"
__copyright__ = "Copyright 2020, Birbnetes Team"
__module_name__ = "loopingtimer"
__version__text__ = "1"
class LoopingTimer:
"""
Looping timer. Executes a function and repeates it in the given interval.
"""
def __init__(self, interval, function, *args, **kwargs):
"""
Initialize class
:param interval:
:param function:
:param args:
:param kwargs:
"""
self._timer = None
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.is_running = False
self.start()
def _run(self) -> None:
"""
Run once
:return:
"""
self.is_running = False
self.start()
self.function(*self.args, **self.kwargs)
def start(self) -> None:
"""
Start running
:return:
"""
if not self.is_running:
self._timer = Timer(self.interval, self._run)
self._timer.start()
self.is_running = True
def stop(self) -> None:
"""
Stop running
:return:
"""
self._timer.cancel()
self.is_running = False