50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import Callable, Optional, TypeVar, Union
|
|
|
|
from .disposable import DisposableBase
|
|
from .scheduler import RelativeTime, ScheduledAction
|
|
|
|
_TState = TypeVar("_TState") # Can be anything
|
|
|
|
ScheduledPeriodicAction = Callable[[Optional[_TState]], Optional[_TState]]
|
|
ScheduledSingleOrPeriodicAction = Union[
|
|
ScheduledAction[_TState], ScheduledPeriodicAction[_TState]
|
|
]
|
|
|
|
|
|
class PeriodicSchedulerBase(ABC):
|
|
"""PeriodicScheduler abstract base class."""
|
|
|
|
__slots__ = ()
|
|
|
|
@abstractmethod
|
|
def schedule_periodic(
|
|
self,
|
|
period: RelativeTime,
|
|
action: ScheduledPeriodicAction[_TState],
|
|
state: Optional[_TState] = None,
|
|
) -> DisposableBase:
|
|
"""Schedules a periodic piece of work.
|
|
|
|
Args:
|
|
period: Period in seconds or timedelta for running the
|
|
work periodically.
|
|
action: Action to be executed.
|
|
state: [Optional] Initial state passed to the action upon
|
|
the first iteration.
|
|
|
|
Returns:
|
|
The disposable object used to cancel the scheduled
|
|
recurring action (best effort).
|
|
"""
|
|
|
|
return NotImplemented
|
|
|
|
|
|
__all__ = [
|
|
"PeriodicSchedulerBase",
|
|
"ScheduledPeriodicAction",
|
|
"ScheduledSingleOrPeriodicAction",
|
|
"RelativeTime",
|
|
]
|