From 3d39652e9ac42491470b55d4a7765256940ced7b Mon Sep 17 00:00:00 2001 From: Abstract-X <44748702+Abstract-X@users.noreply.github.com> Date: Tue, 30 Jun 2020 05:53:51 +1100 Subject: [PATCH] Add methods to register filters and middlewares (#370) * Add methods to register filters and middlewares * Fix docstring in filter unregistration method --- aiogram/dispatcher/dispatcher.py | 35 ++++++++++++++++++++++++++- aiogram/dispatcher/filters/factory.py | 2 +- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/aiogram/dispatcher/dispatcher.py b/aiogram/dispatcher/dispatcher.py index a236df57..5dfc8cf9 100644 --- a/aiogram/dispatcher/dispatcher.py +++ b/aiogram/dispatcher/dispatcher.py @@ -10,7 +10,8 @@ from aiohttp.helpers import sentinel from aiogram.utils.deprecated import renamed_argument from .filters import Command, ContentTypeFilter, ExceptionsFilter, FiltersFactory, HashTag, Regexp, \ - RegexpCommandsFilter, StateFilter, Text, IDFilter, AdminFilter, IsReplyFilter, ForwardedMessageFilter + RegexpCommandsFilter, StateFilter, Text, IDFilter, AdminFilter, IsReplyFilter, ForwardedMessageFilter, \ + AbstractFilter from .filters.builtin import IsSenderContact from .handler import Handler from .middlewares import MiddlewareManager @@ -1232,3 +1233,35 @@ class Dispatcher(DataMixin, ContextInstanceMixin): return wrapped return decorator + + def bind_filter(self, callback: typing.Union[typing.Callable, AbstractFilter], + validator: typing.Optional[typing.Callable] = None, + event_handlers: typing.Optional[typing.List[Handler]] = None, + exclude_event_handlers: typing.Optional[typing.Iterable[Handler]] = None): + """ + Register filter + + :param callback: callable or subclass of :obj:`AbstractFilter` + :param validator: custom validator. + :param event_handlers: list of instances of :obj:`Handler` + :param exclude_event_handlers: list of excluded event handlers (:obj:`Handler`) + """ + self.filters_factory.bind(callback=callback, validator=validator, event_handlers=event_handlers, + exclude_event_handlers=exclude_event_handlers) + + def unbind_filter(self, callback: typing.Union[typing.Callable, AbstractFilter]): + """ + Unregister filter + + :param callback: callable of subclass of :obj:`AbstractFilter` + """ + self.filters_factory.unbind(callback=callback) + + def setup_middleware(self, middleware): + """ + Setup middleware + + :param middleware: + :return: + """ + self.middleware.setup(middleware) diff --git a/aiogram/dispatcher/filters/factory.py b/aiogram/dispatcher/filters/factory.py index 13b188ff..564e7f89 100644 --- a/aiogram/dispatcher/filters/factory.py +++ b/aiogram/dispatcher/filters/factory.py @@ -30,7 +30,7 @@ class FiltersFactory: def unbind(self, callback: typing.Union[typing.Callable, AbstractFilter]): """ - Unregister callback + Unregister filter :param callback: callable of subclass of :obj:`AbstractFilter` """