Daemons now accept an interval value
parent
beb5bf49cc
commit
f6f081bfba
|
@ -4,6 +4,13 @@ from __future__ import annotations
|
|||
|
||||
# Built-in imports
|
||||
import re
|
||||
import asyncio
|
||||
|
||||
# Typing imports
|
||||
from typing import TYPE_CHECKING
|
||||
if TYPE_CHECKING:
|
||||
# Built-in imports
|
||||
from typing import Union
|
||||
|
||||
|
||||
class Simple:
|
||||
|
@ -95,11 +102,31 @@ class RegexCommand(Command):
|
|||
|
||||
class Daemon(Simple):
|
||||
"""
|
||||
Represents a daemon. Currently, it's only used as its own type, but writing
|
||||
it this way allows us to easily expand upon its functionality later.
|
||||
Represents a daemon aka a background process.
|
||||
"""
|
||||
|
||||
pass
|
||||
def __init__(self, func: callable, interval: Union[int, float] = 0):
|
||||
"""
|
||||
Args
|
||||
func: function to wrap
|
||||
interval: time between calls of the function; if < 0, the function
|
||||
is assumed to contain its own infinite loop, allowing for
|
||||
fine-grained control of the daemon, if desired
|
||||
"""
|
||||
|
||||
super().__init__(func)
|
||||
self.interval = interval
|
||||
|
||||
# If an interval > 0 is given, it wraps the function inside an infinite
|
||||
# loop with the desired delay
|
||||
if interval > 0:
|
||||
async def loop(self, *args, **kwargs):
|
||||
while True:
|
||||
func(self, *args, **kwargs)
|
||||
|
||||
await asyncio.sleep(interval)
|
||||
|
||||
self.func = loop
|
||||
|
||||
|
||||
class Default(Simple):
|
||||
|
|
|
@ -1,7 +1,16 @@
|
|||
# =====IMPORTS=====
|
||||
# Future imports
|
||||
from __future__ import annotations
|
||||
|
||||
# Own imports
|
||||
from .classes import Command, RegexCommand, Daemon, Default
|
||||
|
||||
# Typing imports
|
||||
from typing import TYPE_CHECKING
|
||||
if TYPE_CHECKING:
|
||||
# Built-in imports
|
||||
from typing import Union
|
||||
|
||||
|
||||
def command(cmd, help_str: str = None) -> callable:
|
||||
"""
|
||||
|
@ -33,14 +42,14 @@ def regex_command(pattern: str, help_str: str = None) -> callable:
|
|||
return inner
|
||||
|
||||
|
||||
def daemon() -> callable:
|
||||
def daemon(interval: Union[int, float] = 0) -> callable:
|
||||
"""
|
||||
Converts the method into a Daemon, which will then be run when the module
|
||||
is started.
|
||||
"""
|
||||
|
||||
def inner(func):
|
||||
return Daemon(func)
|
||||
return Daemon(func, interval)
|
||||
|
||||
return inner
|
||||
|
||||
|
|
Reference in New Issue