Source code for whistle.dispatchers.base

from abc import ABCMeta, abstractmethod
from typing import Optional

from whistle.listeners import ListenersCollection
from whistle.typing import IDispatchedEvent, IEvent, IListener


[docs] class AbstractEventDispatcher(metaclass=ABCMeta):
[docs] def __init__(self): self._listeners = ListenersCollection()
[docs] def get_listeners(self, event_id: Optional[str] = None, /): # compatibility with 1.x if event_id is None: return {event_id: self._listeners.get(event_id) for event_id in self._listeners.keys()} return self._listeners.get(event_id)
[docs] def has_listeners(self, event_id: Optional[str] = None, /): # compatibility with 1.x if event_id is None: return bool(len(self._listeners.keys())) return self._listeners.has(event_id)
[docs] def add_listener(self, event_id: str, listener: IListener, /, *, priority: int = 0): return self._listeners.add(event_id, listener, priority=priority)
[docs] def remove_listener(self, event_id: str, listener: IListener, /): # deprecated compatibility method return self._listeners.remove(event_id, listener)
[docs] def listen(self, event_id: str, /, *, priority=0): """ Decorator that add the decorated functions as one of this instance listeners, for the given event name. deperecated ? :param event_id: :param priority: :return: """ def wrapper(listener): self._listeners.add(event_id, listener, priority=priority) return listener return wrapper
[docs] @abstractmethod def dispatch(self, event_id: str, event: Optional[IEvent] = None, /) -> IDispatchedEvent: ...
[docs] @abstractmethod async def adispatch(self, event_id: str, event: Optional[IEvent] = None, /) -> IDispatchedEvent: ...