From 3a3facd1bca28345de6c96040403058c8c95fa69 Mon Sep 17 00:00:00 2001 From: RemiZOffAlex Date: Fri, 24 Apr 2026 19:05:51 +0300 Subject: [PATCH] Add src/router/dispatcher.py --- src/router/dispatcher.py | 73 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/router/dispatcher.py diff --git a/src/router/dispatcher.py b/src/router/dispatcher.py new file mode 100644 index 0000000..7e737c5 --- /dev/null +++ b/src/router/dispatcher.py @@ -0,0 +1,73 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + + +import logging + +from .route import Route + + +log = logging.getLogger(__name__) + + +class Dispatcher: + def __init__(self, debug: bool = False): + self.__routes = {} + self.debug = debug + + def clear(self): + self.__routes = {} + + def __call__(self, query): + """Вызов метода + """ + for key in self.__routes: + _route = self.__routes[key] + if self.debug: + log.debug('{key}: {route}'.format( + key=key, + route=_route + )) + output = _route.comparator(query) + if output: + return _route.method + + def __getitem__(self, key): + method = self.__routes[key] + return method.method + + def __iter__(self): + return iter(self.__routes) + + def __len__(self): + return len(self.__routes) + + def __setitem__(self, key, method): + self.__routes[key] = method + + def __delitem__(self, key): + del self.__routes[key] + + def __repr__(self): + return repr(self.__routes) + + def register(self, name: str, comparator, method): + """регистратор + """ + route = Route( + comparator=comparator, + method=method + ) + self.__routes[name] = route + + def route(self, name: str, comparator, *args): + """Декоратор + """ + def wrap(method): + _route = Route( + comparator=comparator, + method=method + ) + self.__routes[name] = _route + return method + return wrap