Add src/router/dispatcher.py
This commit is contained in:
@@ -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
|
||||||
Reference in New Issue
Block a user