-
-
Notifications
You must be signed in to change notification settings - Fork 133
/
Copy pathutil.py
38 lines (26 loc) · 1.07 KB
/
util.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from typing import Any
from typing import Optional
from parse import Match
from parse import Parser
class ExtendedParser(Parser): # type: ignore
def _handle_field(self, field: str) -> Any:
# handle as path parameter field
field = field[1:-1]
path_parameter_field = "{%s:PathParameter}" % field
return super()._handle_field(path_parameter_field)
class PathParameter:
name = "PathParameter"
pattern = r"[^\/]*"
def __call__(self, text: str) -> str:
return text
parse_path_parameter = PathParameter()
def search(path_pattern: str, full_url_pattern: str) -> Optional[Match]:
extra_types = {parse_path_parameter.name: parse_path_parameter}
p = ExtendedParser(path_pattern, extra_types)
p._expression = p._expression + "$"
return p.search(full_url_pattern)
def parse(server_url: str, server_url_pattern: str) -> Match:
extra_types = {parse_path_parameter.name: parse_path_parameter}
p = ExtendedParser(server_url, extra_types)
p._expression = "^" + p._expression
return p.parse(server_url_pattern)