summaryrefslogtreecommitdiff
path: root/day7/router.py
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2019-06-08 12:04:03 +0400
committerAndrew <saintruler@gmail.com>2019-06-08 12:04:03 +0400
commit8f27a63ed8962be9bd8cc3cf84977d658c579102 (patch)
tree63c70d15736c56c91d77ab71535a45fad3205bc6 /day7/router.py
parent18617fd71708222fed455aac1d7d826d63ee3804 (diff)
Перенесена основная ст из README.md в докстринги к соответствующим функциям.
Diffstat (limited to 'day7/router.py')
-rw-r--r--day7/router.py33
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():