diff options
| author | Andrew <saintruler@gmail.com> | 2019-07-18 23:12:10 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2019-07-18 23:12:10 +0400 |
| commit | 70c3b1e1c5e1bbc354fe5961bae613bd23c4d8a2 (patch) | |
| tree | e13b70feca0d8cdb10ced6fac91456990ae3f661 /day9/task5_vue/backend/router.py | |
| parent | 473318701040f238fcbef81a404b069b68d64237 (diff) | |
Переписал приложение на Vue. Изменена верстка.
Diffstat (limited to 'day9/task5_vue/backend/router.py')
| -rw-r--r-- | day9/task5_vue/backend/router.py | 41 |
1 files changed, 41 insertions, 0 deletions
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 = {} |