Skip to content

Commit 18d4a53

Browse files
committed
Changed positional url parameters to keyword
1 parent ee67bdb commit 18d4a53

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

adafruit_httpserver/route.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,29 @@ class _Route:
2121
"""Route definition for different paths, see `adafruit_httpserver.server.Server.route`."""
2222

2323
def __init__(self, path: str = "", method: str = GET) -> None:
24-
contains_parameters = re.search(r"<\w*>", path) is not None
24+
self._validate_path(path)
2525

26+
self.parameters_names = [
27+
name[1:-1] for name in re.compile(r"/[^<>]*/?").split(path) if name != ""
28+
]
2629
self.path = (
27-
path if not contains_parameters else re.sub(r"<\w*>", r"([^/]*)", path)
30+
path
31+
if not self._contains_parameters
32+
else re.sub(r"<\w*>", r"([^/]*)", path)
2833
)
2934
self.method = method
30-
self._contains_parameters = contains_parameters
35+
36+
@staticmethod
37+
def _validate_path(path: str) -> None:
38+
if not path.startswith("/"):
39+
raise ValueError("Path must start with a slash.")
40+
41+
if "<>" in path:
42+
raise ValueError("All URL parameters must be named.")
43+
44+
@property
45+
def _contains_parameters(self) -> bool:
46+
return 0 < len(self.parameters_names)
3147

3248
def match(self, other: "_Route") -> Tuple[bool, List[str]]:
3349
"""
@@ -110,7 +126,7 @@ def route_func(request, my_parameter):
110126
found_route, _route = False, None
111127

112128
for _route in self._routes:
113-
matches, url_parameters_values = _route.match(route)
129+
matches, parameters_values = _route.match(route)
114130

115131
if matches:
116132
found_route = True
@@ -121,8 +137,10 @@ def route_func(request, my_parameter):
121137

122138
handler = self._handlers[self._routes.index(_route)]
123139

140+
keyword_parameters = dict(zip(_route.parameters_names, parameters_values))
141+
124142
def wrapped_handler(request):
125-
return handler(request, *url_parameters_values)
143+
return handler(request, **keyword_parameters)
126144

127145
return wrapped_handler
128146

0 commit comments

Comments
 (0)