skip if current router does not have observer for custom event

This commit is contained in:
Andrey Tikhonov 2023-03-19 13:02:02 +01:00
parent fea1b7b0a3
commit 7c56a64c04
2 changed files with 16 additions and 10 deletions

View file

@ -49,8 +49,9 @@ class TelegramEventObserver:
def _resolve_middlewares(self) -> List[MiddlewareType[TelegramObject]]:
middlewares: List[MiddlewareType[TelegramObject]] = []
for router in reversed(tuple(self.router.chain_head)):
observer = router.observers[self.event_name]
middlewares.extend(observer.middleware)
observer = router.observers.get(self.event_name)
if observer:
middlewares.extend(observer.middleware)
return middlewares

View file

@ -105,27 +105,32 @@ class Router:
async def propagate_event(self, update_type: str, event: TelegramObject, **kwargs: Any) -> Any:
kwargs.update(event_router=self)
observer = self.observers[update_type]
observer = self.observers.get(update_type)
async def _wrapped(telegram_event: TelegramObject, **data: Any) -> Any:
return await self._propagate_event(
observer=observer, update_type=update_type, event=telegram_event, **data
)
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
if observer:
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
else:
return await _wrapped(event, **kwargs)
async def _propagate_event(
self,
observer: TelegramEventObserver,
observer: Optional[TelegramEventObserver],
update_type: str,
event: TelegramObject,
**kwargs: Any,
) -> Any:
response = await observer.trigger(event, **kwargs)
if response is REJECTED:
return UNHANDLED
if response is not UNHANDLED:
return response
response = UNHANDLED
if observer:
response = await observer.trigger(event, **kwargs)
if response is REJECTED:
return UNHANDLED
if response is not UNHANDLED:
return response
for router in self.sub_routers:
response = await router.propagate_event(update_type=update_type, event=event, **kwargs)