Add src/router/dispatcher.py

This commit is contained in:
2026-04-24 19:05:51 +03:00
parent 6694785156
commit 3a3facd1bc
+73
View File
@@ -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