Move router validation to Router.parent_router

This commit is contained in:
Alex Root Junior 2019-12-15 22:01:13 +02:00
parent 390648aae6
commit 9c2a3d1324
2 changed files with 10 additions and 4 deletions

View file

@ -87,6 +87,10 @@ class Router:
:param router: :param router:
""" """
if not isinstance(router, Router):
raise ValueError(
f"router should be instance of Router not {type(router).__class__.__name__}"
)
if self._parent_router: if self._parent_router:
raise RuntimeError(f"Router is already attached to {self._parent_router!r}") raise RuntimeError(f"Router is already attached to {self._parent_router!r}")
if self == router: if self == router:
@ -108,6 +112,7 @@ class Router:
parent = parent.parent_router parent = parent.parent_router
self._parent_router = router self._parent_router = router
router.sub_routers.append(self)
def include_router(self, router: Union[Router, str]) -> Router: def include_router(self, router: Union[Router, str]) -> Router:
""" """
@ -120,14 +125,11 @@ class Router:
""" """
if isinstance(router, str): # Resolve import string if isinstance(router, str): # Resolve import string
router = import_module(router) router = import_module(router)
# TODO: move this to setter of `parent_router` property
if not isinstance(router, Router): if not isinstance(router, Router):
raise ValueError( raise ValueError(
f"router should be instance of Router not {type(router).__class__.__name__}" f"router should be instance of Router not {type(router).__class__.__name__}"
) )
router.parent_router = self router.parent_router = self
self.sub_routers.append(router)
return router return router
async def _listen_update(self, update: Update, **kwargs: Any) -> Any: async def _listen_update(self, update: Update, **kwargs: Any) -> Any:

View file

@ -2,7 +2,6 @@ import datetime
from typing import Any from typing import Any
import pytest import pytest
from aiogram.api.types import ( from aiogram.api.types import (
CallbackQuery, CallbackQuery,
Chat, Chat,
@ -71,6 +70,11 @@ class TestRouter:
with pytest.raises(ValueError, match=r"router should be instance of Router"): with pytest.raises(ValueError, match=r"router should be instance of Router"):
router.include_router("tests.test_dispatcher.test_router:TestRouter") router.include_router("tests.test_dispatcher.test_router:TestRouter")
def test_set_parent_router_bad_type(self):
router = Router()
with pytest.raises(ValueError, match=r"router should be instance of Router"):
router.parent_router = object()
def test_observers_config(self): def test_observers_config(self):
router = Router() router = Router()
assert router.update_handler.handlers assert router.update_handler.handlers