Add docs for Dispatcher

This commit is contained in:
Alex Root Junior 2020-06-27 19:46:01 +03:00
parent 8ebbfb1388
commit 7245811c3c
197 changed files with 872 additions and 19 deletions

View file

@ -8,6 +8,19 @@ from .handler import CallbackType, HandlerObject, HandlerType
class EventObserver:
"""
Simple events observer
Is used for managing events is not related with Telegram (For example startup/shutdown processes)
Handlers can be registered via decorator or method
.. code-block:: python
<observer>.register(my_handler)
.. code-block:: python
@<observer>()
async def my_handler(*args, **kwargs): ...
"""
def __init__(self) -> None:

View file

@ -18,6 +18,9 @@ if TYPE_CHECKING: # pragma: no cover
class TelegramEventObserver:
"""
Event observer for Telegram events
Here you can register handler with filters or bounded filters which can be used as keyword arguments instead of writing full references when you register new handlers.
This observer will stops event propagation when first handler is pass.
"""
def __init__(self, router: Router, event_name: str) -> None:
@ -153,10 +156,19 @@ class TelegramEventObserver:
Decorator for registering inner middlewares
Usage:
>>> @<event>.middleware() # via decorator (variant 1)
>>> @<event>.middleware # via decorator (variant 2)
>>> async def my_middleware(handler, event, data): ...
>>> <event>.middleware(middleware) # via method
.. code-block:: python
@<event>.middleware() # via decorator (variant 1)
.. code-block:: python
@<event>.middleware # via decorator (variant 2)
.. code-block:: python
async def my_middleware(handler, event, data): ...
<event>.middleware(my_middleware) # via method
"""
def wrapper(m: MiddlewareType) -> MiddlewareType:
@ -174,10 +186,19 @@ class TelegramEventObserver:
Decorator for registering outer middlewares
Usage:
>>> @<event>.outer_middleware() # via decorator (variant 1)
>>> @<event>.outer_middleware # via decorator (variant 2)
>>> async def my_middleware(handler, event, data): ...
>>> <event>.outer_middleware(my_middleware) # via method
.. code-block:: python
@<event>.outer_middleware() # via decorator (variant 1)
.. code-block:: python
@<event>.outer_middleware # via decorator (variant 2)
.. code-block:: python
async def my_middleware(handler, event, data): ...
<event>.outer_middleware(my_middleware) # via method
"""
def wrapper(m: MiddlewareType) -> MiddlewareType:

View file

@ -15,10 +15,22 @@ from .middlewares.error import ErrorsMiddleware
class Router:
"""
Events router
Router can route update and it nested update types like messages, callback query, polls and all other event types.
Here is used event-observer pattern.
Event handlers can be registered in observer by two ways:
- By observer method - :obj:`router.<event_type>.register(handler, <filters, ...>)`
- By decorator - :obj:`@router.<event_type>(<filters, ...>)`
"""
def __init__(self, use_builtin_filters: bool = True) -> None:
"""
:param use_builtin_filters: `aiogram` has many builtin filters and you can controll automatic registration of this filters in factory
"""
self.use_builtin_filters = use_builtin_filters
self._parent_router: Optional[Router] = None