From 64f5119b08e7882f2bb332876ab3d3f19ee4d9a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleix=20Conchillo=20Flaqu=C3=A9?= Date: Thu, 25 Jul 2024 11:23:19 -0700 Subject: [PATCH] transports(base): allow registering event handlers without decorators --- CHANGELOG.md | 4 ++++ src/pipecat/transports/base_transport.py | 12 ++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3a2cbd80..5ace173b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Transports now allow you to register event handlers without decorators. + ### Changed - `StartFrame` is now a control frame similar to `EndFrame`. diff --git a/src/pipecat/transports/base_transport.py b/src/pipecat/transports/base_transport.py index 32a10b62f..2cc776836 100644 --- a/src/pipecat/transports/base_transport.py +++ b/src/pipecat/transports/base_transport.py @@ -60,20 +60,20 @@ class BaseTransport(ABC): def event_handler(self, event_name: str): def decorator(handler): - self._add_event_handler(event_name, handler) + self.add_event_handler(event_name, handler) return handler return decorator + def add_event_handler(self, event_name: str, handler): + if event_name not in self._event_handlers: + raise Exception(f"Event handler {event_name} not registered") + self._event_handlers[event_name].append(handler) + def _register_event_handler(self, event_name: str): if event_name in self._event_handlers: raise Exception(f"Event handler {event_name} already registered") self._event_handlers[event_name] = [] - def _add_event_handler(self, event_name: str, handler): - if event_name not in self._event_handlers: - raise Exception(f"Event handler {event_name} not registered") - self._event_handlers[event_name].append(handler) - async def _call_event_handler(self, event_name: str, *args, **kwargs): try: for handler in self._event_handlers[event_name]: