fix data transfer from parent to included routers filters

fix data transfer from parent to included routers filters
This commit is contained in:
darksidecat 2021-10-11 22:27:21 +03:00 committed by GitHub
commit e98e895113
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 1 deletions

View file

@ -88,7 +88,7 @@ class TelegramEventObserver:
"""
registry: List[Type[BaseFilter]] = []
for router in self.router.chain:
for router in reversed(tuple(self.router.chain)):
observer = router.observers[self.event_name]
for filter_ in observer.filters:

View file

@ -99,6 +99,40 @@ class TestTelegramEventObserver:
assert MyFilter2 in filters_chain3
assert MyFilter3 in filters_chain3
async def test_resolve_filters_data_from_parent_router(self):
class FilterSet(BaseFilter):
set_filter: bool
async def __call__(self, message: Message) -> dict:
return {"test": "hello world"}
class FilterGet(BaseFilter):
get_filter: bool
async def __call__(self, message: Message, **data) -> bool:
assert 'test' in data
return True
router1 = Router(use_builtin_filters=False)
router2 = Router(use_builtin_filters=False)
router1.include_router(router2)
router1.message.bind_filter(FilterSet)
router2.message.bind_filter(FilterGet)
@router2.message(set_filter=True, get_filter=True)
def handler_test(msg: Message, test: str):
assert test == "hello world"
await router1.propagate_event(
"message",
Message(
message_id=1,
date=datetime.datetime.now(),
chat=Chat(id=1, type='private')
),
)
def test_resolve_filters(self):
router = Router(use_builtin_filters=False)
observer = router.message