diff options
Diffstat (limited to 'src/apscheduler/datastores/base.py')
-rw-r--r-- | src/apscheduler/datastores/base.py | 58 |
1 files changed, 34 insertions, 24 deletions
diff --git a/src/apscheduler/datastores/base.py b/src/apscheduler/datastores/base.py index c05d28c..5c7ef7d 100644 --- a/src/apscheduler/datastores/base.py +++ b/src/apscheduler/datastores/base.py @@ -1,37 +1,47 @@ from __future__ import annotations -from apscheduler.abc import ( - AsyncDataStore, - AsyncEventBroker, - DataStore, - EventBroker, - EventSource, -) +from contextlib import AsyncExitStack +from logging import Logger, getLogger +import attrs +from .._retry import RetryMixin +from ..abc import DataStore, EventBroker, Serializer +from ..serializers.pickle import PickleSerializer + + +@attrs.define(kw_only=True) class BaseDataStore(DataStore): - _events: EventBroker + """ + Base class for data stores. - def start(self, event_broker: EventBroker) -> None: - self._events = event_broker + :param lock_expiration_delay: maximum amount of time (in seconds) that a scheduler + or worker can keep a lock on a schedule or task + """ - def stop(self, *, force: bool = False) -> None: - del self._events + lock_expiration_delay: float = 30 + _event_broker: EventBroker = attrs.field(init=False) + _logger: Logger = attrs.field(init=False) - @property - def events(self) -> EventSource: - return self._events + async def start( + self, exit_stack: AsyncExitStack, event_broker: EventBroker + ) -> None: + self._event_broker = event_broker + def __attrs_post_init__(self): + self._logger = getLogger(self.__class__.__name__) -class BaseAsyncDataStore(AsyncDataStore): - _events: AsyncEventBroker - async def start(self, event_broker: AsyncEventBroker) -> None: - self._events = event_broker +@attrs.define(kw_only=True) +class BaseExternalDataStore(BaseDataStore, RetryMixin): + """ + Base class for data stores using an external service such as a database. - async def stop(self, *, force: bool = False) -> None: - del self._events + :param serializer: the serializer used to (de)serialize tasks, schedules and jobs + for storage + :param start_from_scratch: erase all existing data during startup (useful for test + suites) + """ - @property - def events(self) -> EventSource: - return self._events + serializer: Serializer = attrs.field(factory=PickleSerializer) + start_from_scratch: bool = attrs.field(default=False) |