add new method for Router (#1117)

* add new method for Router

* add type hint, tests, changes file

* update tests

* Update aiogram/dispatcher/router.py

* Update tests/test_dispatcher/test_router.py

* Update router.py

---------

Co-authored-by: Alex Root Junior <jroot.junior@gmail.com>
This commit is contained in:
sheldy 2023-02-12 01:26:49 +02:00 committed by GitHub
parent e8d279c8f2
commit bac90c8fa7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 0 deletions

1
CHANGES/1117.feature.rst Normal file
View file

@ -0,0 +1 @@
Added a method that allows you to compactly register routers

View file

@ -179,6 +179,12 @@ class Router:
self._parent_router = router self._parent_router = router
router.sub_routers.append(self) router.sub_routers.append(self)
def include_routers(self, *routers: Router) -> None:
if not routers:
raise ValueError("At least one router must be provided")
for router in routers:
self.include_router(router)
def include_router(self, router: Router) -> Router: def include_router(self, router: Router) -> Router:
""" """
Attach another router. Attach another router.

View file

@ -33,6 +33,20 @@ class TestRouter:
assert router3.parent_router is router2 assert router3.parent_router is router2
assert router3.sub_routers == [] assert router3.sub_routers == []
def test_including_many_routers(self):
router = Router()
router1 = Router()
router2 = Router()
router.include_routers(router1, router2)
assert router.sub_routers == [router1, router2]
def test_including_many_routers_bad_type(self):
router = Router()
with pytest.raises(ValueError, match="At least one router must be provided"):
router.include_routers()
def test_include_router_by_string_bad_type(self): def test_include_router_by_string_bad_type(self):
router = Router() router = Router()
with pytest.raises(ValueError, match=r"router should be instance of Router"): with pytest.raises(ValueError, match=r"router should be instance of Router"):