Skip to content

Commit 8dc3921

Browse files
authored
Merge pull request #337 from mik-laj/re-path
Support basic re_path
2 parents 38ab5a0 + ff4d852 commit 8dc3921

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

openapi_core/contrib/django/requests.py

+5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ def create(cls, request):
3636
else:
3737
route = cls.path_regex.sub(
3838
r'{\1}', request.resolver_match.route)
39+
# Delete start and end marker to allow concatenation.
40+
if route[:1] == "^":
41+
route = route[1:]
42+
if route[-1:] == "$":
43+
route = route[:-1]
3944
path_pattern = '/' + route
4045

4146
path = request.resolver_match and request.resolver_match.kwargs or {}

tests/integration/contrib/test_django.py

+27-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def django_settings(self):
1919
import django
2020
from django.conf import settings
2121
from django.contrib import admin
22-
from django.urls import path
22+
from django.urls import path, re_path
2323

2424
if settings.configured:
2525
return
@@ -44,6 +44,7 @@ def django_settings(self):
4444
django.setup()
4545
settings.ROOT_URLCONF = (
4646
path('admin/', admin.site.urls),
47+
re_path('^test/test-regexp/$', lambda d: None)
4748
)
4849

4950
@pytest.fixture
@@ -138,6 +139,31 @@ def test_url_rule(self, request_factory):
138139
assert openapi_request.body == request.body
139140
assert openapi_request.mimetype == request.content_type
140141

142+
def test_url_regexp_pattern(self, request_factory):
143+
from django.urls import resolve
144+
request = request_factory.get('/test/test-regexp/')
145+
request.resolver_match = resolve('/test/test-regexp/')
146+
147+
openapi_request = DjangoOpenAPIRequest(request)
148+
149+
path = {}
150+
query = {}
151+
headers = {
152+
'Cookie': '',
153+
}
154+
cookies = {}
155+
assert openapi_request.parameters == RequestParameters(
156+
path=path,
157+
query=query,
158+
header=headers,
159+
cookie=cookies,
160+
)
161+
assert openapi_request.method == request.method.lower()
162+
assert openapi_request.full_url_pattern == \
163+
request._current_scheme_host + "/test/test-regexp/"
164+
assert openapi_request.body == request.body
165+
assert openapi_request.mimetype == request.content_type
166+
141167

142168
class TestDjangoOpenAPIResponse(BaseTestDjango):
143169

0 commit comments

Comments
 (0)