diff options
| author | Andrew <saintruler@gmail.com> | 2019-06-08 12:04:03 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2019-06-08 12:04:03 +0400 |
| commit | 8f27a63ed8962be9bd8cc3cf84977d658c579102 (patch) | |
| tree | 63c70d15736c56c91d77ab71535a45fad3205bc6 /day7/router.py | |
| parent | 18617fd71708222fed455aac1d7d826d63ee3804 (diff) | |
Перенесена основная ст из README.md в докстринги к соответствующим функциям.
Diffstat (limited to 'day7/router.py')
| -rw-r--r-- | day7/router.py | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/day7/router.py b/day7/router.py index c662592..1e3d5af 100644 --- a/day7/router.py +++ b/day7/router.py @@ -6,16 +6,31 @@ from backend import * class Route: + """ + Представляет из себя класс роута. При инициализации принимает допустимые + методы и регулярное выражение. Содержит методы для работы роутинга. + Чтобы созданный путь стал обрабатываться необходимо поместить объект Route в таблицу роутера. + """ + def __init__(self, callback, url_format, methods=None): self.methods = ['GET'] if methods is None else methods self.url_pattern = re.compile(url_format) self.callback = callback - def check_route(self, url, method): + def check_route(self, url, method) -> bool: + """ + По указанным URL и методу проверят подходит ли URL под соответсвующие настройки пути. + """ + match = self.url_pattern.fullmatch(url) return bool(match) and len(match.groups()) == self.url_pattern.groups and method in self.methods def invoke_callback(self, url, method, query): + """ + Как и `check_route` проверяет параметр на валидность, но если он валиден, то + вызывается соответствующий обработчик. + """ + match = self.url_pattern.fullmatch(url) groups = match.groups() @@ -28,6 +43,15 @@ class Route: # url_format - регулярное выражение def route(url_format, methods=None): + """ + *Используется как декоратор.* + + Указание при каком url и методах в запросе должна вызываться декорируемая функция. + При инициализации декоратора надо указать url регулярное выражение и http методы. + В декорируемую функцию передаются параметры query из тела запроса и сматченные группы + из регулярного выражения `url_format`. Добавляет декорируемые функции в дерево роутера. + """ + if methods is None: methods = ['GET'] @@ -52,6 +76,13 @@ def route(url_format, methods=None): def run(request): + """ + Принимает разобранный http-запрос, добавляет новые cookie-данные в базу данных. + Ищет в таблице роутера функцию, которую необходимо вызвать для обработки текущего запроса. + При нахождении такой функции передает ей все необходимые данные о запросе. + Если подходящая функция не была найдена возвращает обработчику статус `404 Not Found`.\ + """ + res = NOT_FOUND, NOT_FOUND for key, value in request['cookies'].items(): |