summaryrefslogtreecommitdiff
path: root/src/apscheduler/abc.py
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2021-09-11 21:14:14 +0300
committerAlex Grönholm <alex.gronholm@nextday.fi>2021-09-11 21:14:14 +0300
commit56afe91d5dc338db3440b2e9ecdea3e522dba30f (patch)
tree311380b0d953f09919d7e8c4c0a340507e5d0dc5 /src/apscheduler/abc.py
parent7248a78e7e787b728b083aaa8199eeba3a3f3023 (diff)
downloadapscheduler-56afe91d5dc338db3440b2e9ecdea3e522dba30f.tar.gz
Implemented a pluggable event broker system
Diffstat (limited to 'src/apscheduler/abc.py')
-rw-r--r--src/apscheduler/abc.py52
1 files changed, 50 insertions, 2 deletions
diff --git a/src/apscheduler/abc.py b/src/apscheduler/abc.py
index 97fec87..9751293 100644
--- a/src/apscheduler/abc.py
+++ b/src/apscheduler/abc.py
@@ -65,6 +65,8 @@ class Serializer(metaclass=ABCMeta):
class EventSource(metaclass=ABCMeta):
+ """Interface for objects that can deliver notifications to interested subscribers."""
+
@abstractmethod
def subscribe(
self, callback: Callable[[events.Event], Any],
@@ -86,7 +88,13 @@ class EventSource(metaclass=ABCMeta):
"""
-class DataStore(EventSource):
+class EventBroker(EventSource):
+ """
+ Interface for objects that can be used to publish notifications to interested subscribers.
+
+ Can be used as a context manager.
+ """
+
def __enter__(self):
return self
@@ -94,6 +102,41 @@ class DataStore(EventSource):
pass
@abstractmethod
+ def publish(self, event: events.Event) -> None:
+ """Publish an event."""
+
+
+class AsyncEventBroker(EventSource):
+ """
+ Asynchronous version of :class:`EventBroker`.
+
+ Can be used as an asynchronous context manager.
+ """
+
+ async def __aenter__(self):
+ return self
+
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
+ pass
+
+ @abstractmethod
+ async def publish(self, event: events.Event) -> None:
+ """Publish an event."""
+
+
+class DataStore:
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ pass
+
+ @property
+ @abstractmethod
+ def events(self) -> EventSource:
+ pass
+
+ @abstractmethod
def add_task(self, task: Task) -> None:
"""
Add the given task to the store.
@@ -239,13 +282,18 @@ class DataStore(EventSource):
"""
-class AsyncDataStore(EventSource):
+class AsyncDataStore:
async def __aenter__(self):
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
pass
+ @property
+ @abstractmethod
+ def events(self) -> EventSource:
+ pass
+
@abstractmethod
async def add_task(self, task: Task) -> None:
"""