From 70c3b1e1c5e1bbc354fe5961bae613bd23c4d8a2 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 18 Jul 2019 23:12:10 +0400 Subject: =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81=D0=B0=D0=BB?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BD=D0=B0=20Vue.=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=B5=D1=80=D1=81=D1=82=D0=BA=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day9/task5_vue/backend/router.py | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 day9/task5_vue/backend/router.py (limited to 'day9/task5_vue/backend/router.py') diff --git a/day9/task5_vue/backend/router.py b/day9/task5_vue/backend/router.py new file mode 100644 index 0000000..be8305e --- /dev/null +++ b/day9/task5_vue/backend/router.py @@ -0,0 +1,41 @@ +import re +from backend.utils import NOT_FOUND_CODE, BAD_REQUEST_CODE +from backend.core import Response, ErrorResponse + + +def route(url_format, methods=None): + if methods is None: + methods = ['GET'] + + def wrapper(func): + def inner(url, query, *args, **kwargs): + pattern = re.compile(url_format) + match = re.fullmatch(pattern, url) + + if match is None or len(match.groups()) != pattern.groups: + return ErrorResponse(BAD_REQUEST_CODE) + + return func(query, *match.groups(), *args, **kwargs) + + _router_tree[url_format] = _router_tree.get(url_format, {}) + for method in methods: + _router_tree[url_format][method] = inner + + return inner + + return wrapper + + +def run(request) -> Response: + res = ErrorResponse(NOT_FOUND_CODE) + + method, url = request['method'], request['url'] + for url_pattern in _router_tree: + if re.fullmatch(url_pattern, url) and method in _router_tree[url_pattern]: + res = _router_tree[url_pattern][method](url, request['query']) + break + + return res + + +_router_tree = {} -- cgit v1.2.3