From 5a5a811dca65c18fd4311b2f19bcd2b69a14a669 Mon Sep 17 00:00:00 2001 From: taoufik07 Date: Tue, 12 Mar 2019 16:58:36 +0100 Subject: [PATCH] Add routes specifiers --- responder/routes.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/responder/routes.py b/responder/routes.py index 490c2f5..997fe05 100644 --- a/responder/routes.py +++ b/responder/routes.py @@ -1,7 +1,22 @@ import re import functools import inspect -from parse import parse +from parse import parse, with_pattern + + +def _make_convertor(type, pattern): + @with_pattern(pattern) + def inner(value): + return type(value) + + return inner + + +_convertors = { + "int": _make_convertor(int, r"\d+"), + "str": _make_convertor(str, r"[^/]+"), + "float": _make_convertor(float, r"\d+(.\d+)?"), +} class Route: @@ -46,7 +61,7 @@ class Route: @functools.lru_cache(maxsize=None) def incoming_matches(self, s): - results = parse(self.route, s) + results = parse(self.route, s, _convertors) return results.named if results else {} def url(self, **params):