Skip to content

Commit b18a2d3

Browse files
authored
Merge pull request #490 from p1c2u/fix/integration-request-response-factories-check-types-fix
Fix integration Request Response factories check types fix
2 parents 9005a84 + 76dfd63 commit b18a2d3

16 files changed

+57
-0
lines changed

openapi_core/contrib/django/requests.py

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class DjangoOpenAPIRequest:
3030
path_regex = re.compile(PATH_PARAMETER_PATTERN)
3131

3232
def __init__(self, request: HttpRequest):
33+
if not isinstance(request, HttpRequest):
34+
raise TypeError(f"'request' argument is not type of {HttpRequest}")
3335
self.request = request
3436

3537
path = (

openapi_core/contrib/django/responses.py

+4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55

66
class DjangoOpenAPIResponse:
77
def __init__(self, response: HttpResponse):
8+
if not isinstance(response, HttpResponse):
9+
raise TypeError(
10+
f"'response' argument is not type of {HttpResponse}"
11+
)
812
self.response = response
913

1014
@property

openapi_core/contrib/falcon/requests.py

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ def __init__(
1818
request: Request,
1919
default_when_empty: Optional[Dict[Any, Any]] = None,
2020
):
21+
if not isinstance(request, Request):
22+
raise TypeError(f"'request' argument is not type of {Request}")
2123
self.request = request
2224
if default_when_empty is None:
2325
default_when_empty = {}

openapi_core/contrib/falcon/responses.py

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
class FalconOpenAPIResponse:
77
def __init__(self, response: Response):
8+
if not isinstance(response, Response):
9+
raise TypeError(f"'response' argument is not type of {Response}")
810
self.response = response
911

1012
@property

openapi_core/contrib/flask/requests.py

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
class FlaskOpenAPIRequest(WerkzeugOpenAPIRequest):
1111
def __init__(self, request: Request):
12+
if not isinstance(request, Request):
13+
raise TypeError(f"'request' argument is not type of {Request}")
1214
self.request: Request = request
1315

1416
self.parameters = RequestParameters(

openapi_core/contrib/requests/requests.py

+5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ class RequestsOpenAPIRequest:
2323
"""
2424

2525
def __init__(self, request: Union[Request, PreparedRequest]):
26+
if not isinstance(request, (Request, PreparedRequest)):
27+
raise TypeError(
28+
"'request' argument is not type of "
29+
f"{Request} or {PreparedRequest}"
30+
)
2631
if isinstance(request, Request):
2732
request = request.prepare()
2833

openapi_core/contrib/requests/responses.py

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
class RequestsOpenAPIResponse:
77
def __init__(self, response: Response):
8+
if not isinstance(response, Response):
9+
raise TypeError(f"'response' argument is not type of {Response}")
810
self.response = response
911

1012
@property

openapi_core/contrib/starlette/requests.py

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
class StarletteOpenAPIRequest:
1111
def __init__(self, request: Request):
12+
if not isinstance(request, Request):
13+
raise TypeError(f"'request' argument is not type of {Request}")
1214
self.request = request
1315

1416
self.parameters = RequestParameters(

openapi_core/contrib/starlette/responses.py

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
class StarletteOpenAPIResponse:
77
def __init__(self, response: Response):
8+
if not isinstance(response, Response):
9+
raise TypeError(f"'response' argument is not type of {Response}")
810
self.response = response
911

1012
@property

openapi_core/contrib/werkzeug/requests.py

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class WerkzeugOpenAPIRequest:
1717
path_regex = re.compile(PATH_PARAMETER_PATTERN)
1818

1919
def __init__(self, request: Request):
20+
if not isinstance(request, Request):
21+
raise TypeError(f"'request' argument is not type of {Request}")
2022
self.request = request
2123

2224
self.parameters = RequestParameters(

openapi_core/contrib/werkzeug/responses.py

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
class WerkzeugOpenAPIResponse:
77
def __init__(self, response: Response):
8+
if not isinstance(response, Response):
9+
raise TypeError(f"'response' argument is not type of {Response}")
810
self.response = response
911

1012
@property

tests/unit/contrib/django/test_django.py

+8
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ def create(content=b"", status_code=None):
6363

6464

6565
class TestDjangoOpenAPIRequest(BaseTestDjango):
66+
def test_type_invalid(self):
67+
with pytest.raises(TypeError):
68+
DjangoOpenAPIRequest(None)
69+
6670
def test_no_resolver(self, request_factory):
6771
data = {"test1": "test2"}
6872
request = request_factory.get("/admin/", data)
@@ -168,6 +172,10 @@ def test_drf_default_value_pattern(self, request_factory):
168172

169173

170174
class TestDjangoOpenAPIResponse(BaseTestDjango):
175+
def test_type_invalid(self):
176+
with pytest.raises(TypeError):
177+
DjangoOpenAPIResponse(None)
178+
171179
def test_stream_response(self, response_factory):
172180
response = response_factory()
173181
response.writelines(["foo\n", "bar\n", "baz\n"])

tests/unit/contrib/flask/test_flask_requests.py

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from urllib.parse import urljoin
22

3+
import pytest
34
from werkzeug.datastructures import Headers
45
from werkzeug.datastructures import ImmutableMultiDict
56

@@ -8,6 +9,10 @@
89

910

1011
class TestFlaskOpenAPIRequest:
12+
def test_type_invalid(self):
13+
with pytest.raises(TypeError):
14+
FlaskOpenAPIRequest(None)
15+
1116
def test_simple(self, request_factory, request):
1217
request = request_factory("GET", "/", subdomain="www")
1318

tests/unit/contrib/flask/test_flask_responses.py

+6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1+
import pytest
2+
13
from openapi_core.contrib.flask import FlaskOpenAPIResponse
24

35

46
class TestFlaskOpenAPIResponse:
7+
def test_type_invalid(self):
8+
with pytest.raises(TypeError):
9+
FlaskOpenAPIResponse(None)
10+
511
def test_invalid_server(self, response_factory):
612
data = "Not Found"
713
status_code = 404

tests/unit/contrib/requests/test_requests_requests.py

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import pytest
12
from werkzeug.datastructures import Headers
23
from werkzeug.datastructures import ImmutableMultiDict
34

@@ -6,6 +7,10 @@
67

78

89
class TestRequestsOpenAPIRequest:
10+
def test_type_invalid(self):
11+
with pytest.raises(TypeError):
12+
RequestsOpenAPIRequest(None)
13+
914
def test_simple(self, request_factory, request):
1015
request = request_factory("GET", "/", subdomain="www")
1116

tests/unit/contrib/requests/test_requests_responses.py

+6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1+
import pytest
2+
13
from openapi_core.contrib.requests import RequestsOpenAPIResponse
24

35

46
class TestRequestsOpenAPIResponse:
7+
def test_type_invalid(self):
8+
with pytest.raises(TypeError):
9+
RequestsOpenAPIResponse(None)
10+
511
def test_invalid_server(self, response_factory):
612
data = "Not Found"
713
status_code = 404

0 commit comments

Comments
 (0)