From 8f27a63ed8962be9bd8cc3cf84977d658c579102 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 8 Jun 2019 12:04:03 +0400 Subject: =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=81=D1=82=20=D0=B8=D0=B7=20README.md=20=D0=B2=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=BA=D1=81=D1=82=D1=80=D0=B8=D0=BD=D0=B3=D0=B8=20=D0=BA=20?= =?UTF-8?q?=D1=81=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D1=83=D1=8E=D1=89=D0=B8=D0=BC=20=D1=84=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=D0=BC.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day7/router.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'day7/router.py') 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(): -- cgit v1.2.3