event_listener v1.2
Adapted from the Griptape AI Framework documentation.
T = TypeVar('T', bound=BaseEvent)module-attribute
Bases:
Generic[T]
Attributes
| Name | Type | Description |
|---|---|---|
on_event | Optional[Callable[[T], Optional[BaseEvent | dict]]] | The on_event function that will be called when an event is published. The on_event function should accept an event and return either the event or a dictionary. If the on_event returns None, the event will not be published. |
event_types | Optional[list[type[T]]] | A list of event types that the event listener should listen for. If not provided, the event listener will listen for all event types. |
event_listener_driver | Optional[BaseEventListenerDriver] | The driver that will be used to publish events. |
Source Code in griptape/events/event_listener.py
@define class EventListener(Generic[T]): """An event listener that listens for events and handles them. Attributes: on_event: The on_event function that will be called when an event is published. The on_event function should accept an event and return either the event or a dictionary. If the on_event returns None, the event will not be published. event_types: A list of event types that the event listener should listen for. If not provided, the event listener will listen for all event types. event_listener_driver: The driver that will be used to publish events. """ on_event: Optional[Callable[[T], Optional[BaseEvent | dict]]] = field(default=None) event_types: Optional[list[type[T]]] = field(default=None, kw_only=True) event_listener_driver: Optional[BaseEventListenerDriver] = field(default=None, kw_only=True) def __enter__(self) -> Self: from griptape.events import EventBus EventBus.add_event_listener(self) return self def __exit__(self, type, value, traceback) -> None: # noqa: ANN001, A002 from griptape.events import EventBus EventBus.remove_event_listener(self) def publish_event(self, event: T, *, flush: bool = False) -> None: event_types = self.event_types if event_types is None or any(isinstance(event, event_type) for event_type in event_types): handled_event = event if self.on_event is not None: handled_event = self.on_event(event) if self.event_listener_driver is not None and handled_event is not None: self.event_listener_driver.publish_event(handled_event) if self.event_listener_driver is not None and flush: self.event_listener_driver.flush_events()
event_listener_driver = field(default=None, kw_only=True)class-attribute instance-attributeevent_types = field(default=None, kw_only=True)class-attribute instance-attributeon_event = field(default=None)class-attribute instance-attribute
enter()
Source Code in griptape/events/event_listener.py
def __enter__(self) -> Self: from griptape.events import EventBus EventBus.add_event_listener(self) return self
exit(type, value, traceback)
Source Code in griptape/events/event_listener.py
def __exit__(self, type, value, traceback) -> None: # noqa: ANN001, A002 from griptape.events import EventBus EventBus.remove_event_listener(self)
publish_event(event, *, flush=False)
Source Code in griptape/events/event_listener.py
def publish_event(self, event: T, *, flush: bool = False) -> None: event_types = self.event_types if event_types is None or any(isinstance(event, event_type) for event_type in event_types): handled_event = event if self.on_event is not None: handled_event = self.on_event(event) if self.event_listener_driver is not None and handled_event is not None: self.event_listener_driver.publish_event(handled_event) if self.event_listener_driver is not None and flush: self.event_listener_driver.flush_events()