mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-06 07:50:32 +00:00
Fix resolve filters chain (#736)
* filter resolving don`t need children routers filters * add patchnote * Rename 735.bugfix to 736.bugfix * add tests for routers chains * delete unused Router.chain property
This commit is contained in:
parent
1c2c7fd88c
commit
19aa498682
5 changed files with 34 additions and 8 deletions
1
CHANGES/736.bugfix
Normal file
1
CHANGES/736.bugfix
Normal file
|
|
@ -0,0 +1 @@
|
|||
Fixed: bound filter resolving does not require children routers
|
||||
|
|
@ -88,7 +88,7 @@ class TelegramEventObserver:
|
|||
"""
|
||||
registry: List[Type[BaseFilter]] = []
|
||||
|
||||
for router in reversed(tuple(self.router.chain)):
|
||||
for router in reversed(tuple(self.router.chain_head)):
|
||||
observer = router.observers[self.event_name]
|
||||
|
||||
for filter_ in observer.filters:
|
||||
|
|
|
|||
|
|
@ -160,13 +160,6 @@ class Router:
|
|||
for router in self.sub_routers:
|
||||
yield from router.chain_tail
|
||||
|
||||
@property
|
||||
def chain(self) -> Generator[Router, None, None]:
|
||||
yield from self.chain_head
|
||||
tail = self.chain_tail
|
||||
next(tail) # Skip self
|
||||
yield from tail
|
||||
|
||||
@property
|
||||
def parent_router(self) -> Optional[Router]:
|
||||
return self._parent_router
|
||||
|
|
|
|||
|
|
@ -99,6 +99,8 @@ class TestTelegramEventObserver:
|
|||
assert MyFilter2 in filters_chain3
|
||||
assert MyFilter3 in filters_chain3
|
||||
|
||||
assert MyFilter3 not in filters_chain1
|
||||
|
||||
async def test_resolve_filters_data_from_parent_router(self):
|
||||
class FilterSet(BaseFilter):
|
||||
set_filter: bool
|
||||
|
|
|
|||
|
|
@ -134,3 +134,33 @@ class TestRouter:
|
|||
r2.message.register(handler)
|
||||
|
||||
assert await r1.propagate_event(update_type="message", event=None) is UNHANDLED
|
||||
|
||||
async def test_router_chain_tail(self):
|
||||
r1 = Router(name="Router 1")
|
||||
r2_1 = Router(name="Router 2-1")
|
||||
r2_2 = Router(name="Router 2-2")
|
||||
r3 = Router(name="Router 3")
|
||||
|
||||
r1.include_router(r2_1)
|
||||
r1.include_router(r2_2)
|
||||
r2_1.include_router(r3)
|
||||
|
||||
assert tuple(r1.chain_tail) == (r1, r2_1, r3, r2_2)
|
||||
assert tuple(r2_1.chain_tail) == (r2_1, r3)
|
||||
assert tuple(r2_2.chain_tail) == (r2_2,)
|
||||
assert tuple(r3.chain_tail) == (r3,)
|
||||
|
||||
async def test_router_chain_head(self):
|
||||
r1 = Router(name="Router 1")
|
||||
r2_1 = Router(name="Router 2-1")
|
||||
r2_2 = Router(name="Router 2-2")
|
||||
r3 = Router(name="Router 3")
|
||||
|
||||
r1.include_router(r2_1)
|
||||
r1.include_router(r2_2)
|
||||
r2_1.include_router(r3)
|
||||
|
||||
assert tuple(r1.chain_head) == (r1,)
|
||||
assert tuple(r2_1.chain_head) == (r2_1, r1)
|
||||
assert tuple(r2_2.chain_head) == (r2_2, r1)
|
||||
assert tuple(r3.chain_head) == (r3, r2_1, r1)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue