Skip to content

Commit d4dce1f

Browse files
committed
Templating parser path parameter search fix
1 parent 97ec8c7 commit d4dce1f

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

openapi_core/templating/util.py

+19-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,30 @@
11
from parse import Parser
22

33

4+
class ExtendedParser(Parser):
5+
def _handle_field(self, field):
6+
# handle as path parameter field
7+
field = field[1:-1]
8+
path_parameter_field = "{%s:PathParameter}" % field
9+
return super(ExtendedParser, self)._handle_field(
10+
path_parameter_field)
11+
12+
13+
def parse_path_parameter(text):
14+
return text
15+
parse_path_parameter.pattern = r"[^\/]+"
16+
parse_path_parameter.name = "PathParameter"
17+
18+
419
def search(path_pattern, full_url_pattern):
5-
p = Parser(path_pattern)
20+
extra_types = {parse_path_parameter.name: parse_path_parameter}
21+
p = ExtendedParser(path_pattern, extra_types)
622
p._expression = p._expression + '$'
723
return p.search(full_url_pattern)
824

925

1026
def parse(server_url, server_url_pattern):
11-
p = Parser(server_url)
27+
extra_types = {parse_path_parameter.name: parse_path_parameter}
28+
p = ExtendedParser(server_url, extra_types)
1229
p._expression = '^' + p._expression
1330
return p.parse(server_url_pattern)

tests/unit/templating/test_util.py

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from openapi_core.templating.util import search
2+
3+
4+
class TestSearch:
5+
6+
def test_endswith(self):
7+
path_patter = '/{test}/test'
8+
full_url_pattern = '/test1/test/test2/test'
9+
10+
result = search(path_patter, full_url_pattern)
11+
12+
assert result.named == {
13+
'test': 'test2',
14+
}
15+
16+
def test_exact(self):
17+
path_patter = '/{test}/test'
18+
full_url_pattern = '/test/test'
19+
20+
result = search(path_patter, full_url_pattern)
21+
22+
assert result.named == {
23+
'test': 'test',
24+
}

0 commit comments

Comments
 (0)