diff --git a/openapi_core/contrib/django/requests.py b/openapi_core/contrib/django/requests.py index 67584239..22de94e9 100644 --- a/openapi_core/contrib/django/requests.py +++ b/openapi_core/contrib/django/requests.py @@ -30,6 +30,8 @@ class DjangoOpenAPIRequest: path_regex = re.compile(PATH_PARAMETER_PATTERN) def __init__(self, request: HttpRequest): + if not isinstance(request, HttpRequest): + raise TypeError(f"'request' argument is not type of {HttpRequest}") self.request = request path = ( diff --git a/openapi_core/contrib/django/responses.py b/openapi_core/contrib/django/responses.py index 838eff06..c1c09256 100644 --- a/openapi_core/contrib/django/responses.py +++ b/openapi_core/contrib/django/responses.py @@ -5,6 +5,10 @@ class DjangoOpenAPIResponse: def __init__(self, response: HttpResponse): + if not isinstance(response, HttpResponse): + raise TypeError( + f"'response' argument is not type of {HttpResponse}" + ) self.response = response @property diff --git a/openapi_core/contrib/falcon/requests.py b/openapi_core/contrib/falcon/requests.py index c078e8bf..bb23586e 100644 --- a/openapi_core/contrib/falcon/requests.py +++ b/openapi_core/contrib/falcon/requests.py @@ -18,6 +18,8 @@ def __init__( request: Request, default_when_empty: Optional[Dict[Any, Any]] = None, ): + if not isinstance(request, Request): + raise TypeError(f"'request' argument is not type of {Request}") self.request = request if default_when_empty is None: default_when_empty = {} diff --git a/openapi_core/contrib/falcon/responses.py b/openapi_core/contrib/falcon/responses.py index 75168557..284c64ba 100644 --- a/openapi_core/contrib/falcon/responses.py +++ b/openapi_core/contrib/falcon/responses.py @@ -5,6 +5,8 @@ class FalconOpenAPIResponse: def __init__(self, response: Response): + if not isinstance(response, Response): + raise TypeError(f"'response' argument is not type of {Response}") self.response = response @property diff --git a/openapi_core/contrib/flask/requests.py b/openapi_core/contrib/flask/requests.py index cb1e658c..656ad9b6 100644 --- a/openapi_core/contrib/flask/requests.py +++ b/openapi_core/contrib/flask/requests.py @@ -9,6 +9,8 @@ class FlaskOpenAPIRequest(WerkzeugOpenAPIRequest): def __init__(self, request: Request): + if not isinstance(request, Request): + raise TypeError(f"'request' argument is not type of {Request}") self.request: Request = request self.parameters = RequestParameters( diff --git a/openapi_core/contrib/requests/requests.py b/openapi_core/contrib/requests/requests.py index f666c939..d543fec9 100644 --- a/openapi_core/contrib/requests/requests.py +++ b/openapi_core/contrib/requests/requests.py @@ -23,6 +23,11 @@ class RequestsOpenAPIRequest: """ def __init__(self, request: Union[Request, PreparedRequest]): + if not isinstance(request, (Request, PreparedRequest)): + raise TypeError( + "'request' argument is not type of " + f"{Request} or {PreparedRequest}" + ) if isinstance(request, Request): request = request.prepare() diff --git a/openapi_core/contrib/requests/responses.py b/openapi_core/contrib/requests/responses.py index 149012af..66343802 100644 --- a/openapi_core/contrib/requests/responses.py +++ b/openapi_core/contrib/requests/responses.py @@ -5,6 +5,8 @@ class RequestsOpenAPIResponse: def __init__(self, response: Response): + if not isinstance(response, Response): + raise TypeError(f"'response' argument is not type of {Response}") self.response = response @property diff --git a/openapi_core/contrib/starlette/requests.py b/openapi_core/contrib/starlette/requests.py index 5ac96d7d..4073003d 100644 --- a/openapi_core/contrib/starlette/requests.py +++ b/openapi_core/contrib/starlette/requests.py @@ -9,6 +9,8 @@ class StarletteOpenAPIRequest: def __init__(self, request: Request): + if not isinstance(request, Request): + raise TypeError(f"'request' argument is not type of {Request}") self.request = request self.parameters = RequestParameters( diff --git a/openapi_core/contrib/starlette/responses.py b/openapi_core/contrib/starlette/responses.py index 8d042e8d..49be986f 100644 --- a/openapi_core/contrib/starlette/responses.py +++ b/openapi_core/contrib/starlette/responses.py @@ -5,6 +5,8 @@ class StarletteOpenAPIResponse: def __init__(self, response: Response): + if not isinstance(response, Response): + raise TypeError(f"'response' argument is not type of {Response}") self.response = response @property diff --git a/openapi_core/contrib/werkzeug/requests.py b/openapi_core/contrib/werkzeug/requests.py index 6c0c30c9..cbfa3e81 100644 --- a/openapi_core/contrib/werkzeug/requests.py +++ b/openapi_core/contrib/werkzeug/requests.py @@ -17,6 +17,8 @@ class WerkzeugOpenAPIRequest: path_regex = re.compile(PATH_PARAMETER_PATTERN) def __init__(self, request: Request): + if not isinstance(request, Request): + raise TypeError(f"'request' argument is not type of {Request}") self.request = request self.parameters = RequestParameters( diff --git a/openapi_core/contrib/werkzeug/responses.py b/openapi_core/contrib/werkzeug/responses.py index 23327e52..c3fc9501 100644 --- a/openapi_core/contrib/werkzeug/responses.py +++ b/openapi_core/contrib/werkzeug/responses.py @@ -5,6 +5,8 @@ class WerkzeugOpenAPIResponse: def __init__(self, response: Response): + if not isinstance(response, Response): + raise TypeError(f"'response' argument is not type of {Response}") self.response = response @property diff --git a/tests/unit/contrib/django/test_django.py b/tests/unit/contrib/django/test_django.py index 25003615..fb4d0316 100644 --- a/tests/unit/contrib/django/test_django.py +++ b/tests/unit/contrib/django/test_django.py @@ -63,6 +63,10 @@ def create(content=b"", status_code=None): class TestDjangoOpenAPIRequest(BaseTestDjango): + def test_type_invalid(self): + with pytest.raises(TypeError): + DjangoOpenAPIRequest(None) + def test_no_resolver(self, request_factory): data = {"test1": "test2"} request = request_factory.get("/admin/", data) @@ -168,6 +172,10 @@ def test_drf_default_value_pattern(self, request_factory): class TestDjangoOpenAPIResponse(BaseTestDjango): + def test_type_invalid(self): + with pytest.raises(TypeError): + DjangoOpenAPIResponse(None) + def test_stream_response(self, response_factory): response = response_factory() response.writelines(["foo\n", "bar\n", "baz\n"]) diff --git a/tests/unit/contrib/flask/test_flask_requests.py b/tests/unit/contrib/flask/test_flask_requests.py index 08d7828a..80f92181 100644 --- a/tests/unit/contrib/flask/test_flask_requests.py +++ b/tests/unit/contrib/flask/test_flask_requests.py @@ -1,5 +1,6 @@ from urllib.parse import urljoin +import pytest from werkzeug.datastructures import Headers from werkzeug.datastructures import ImmutableMultiDict @@ -8,6 +9,10 @@ class TestFlaskOpenAPIRequest: + def test_type_invalid(self): + with pytest.raises(TypeError): + FlaskOpenAPIRequest(None) + def test_simple(self, request_factory, request): request = request_factory("GET", "/", subdomain="www") diff --git a/tests/unit/contrib/flask/test_flask_responses.py b/tests/unit/contrib/flask/test_flask_responses.py index 6b9c30f6..d907bd32 100644 --- a/tests/unit/contrib/flask/test_flask_responses.py +++ b/tests/unit/contrib/flask/test_flask_responses.py @@ -1,7 +1,13 @@ +import pytest + from openapi_core.contrib.flask import FlaskOpenAPIResponse class TestFlaskOpenAPIResponse: + def test_type_invalid(self): + with pytest.raises(TypeError): + FlaskOpenAPIResponse(None) + def test_invalid_server(self, response_factory): data = "Not Found" status_code = 404 diff --git a/tests/unit/contrib/requests/test_requests_requests.py b/tests/unit/contrib/requests/test_requests_requests.py index 4e444d15..6d3a7982 100644 --- a/tests/unit/contrib/requests/test_requests_requests.py +++ b/tests/unit/contrib/requests/test_requests_requests.py @@ -1,3 +1,4 @@ +import pytest from werkzeug.datastructures import Headers from werkzeug.datastructures import ImmutableMultiDict @@ -6,6 +7,10 @@ class TestRequestsOpenAPIRequest: + def test_type_invalid(self): + with pytest.raises(TypeError): + RequestsOpenAPIRequest(None) + def test_simple(self, request_factory, request): request = request_factory("GET", "/", subdomain="www") diff --git a/tests/unit/contrib/requests/test_requests_responses.py b/tests/unit/contrib/requests/test_requests_responses.py index 62da483f..f5b79256 100644 --- a/tests/unit/contrib/requests/test_requests_responses.py +++ b/tests/unit/contrib/requests/test_requests_responses.py @@ -1,7 +1,13 @@ +import pytest + from openapi_core.contrib.requests import RequestsOpenAPIResponse class TestRequestsOpenAPIResponse: + def test_type_invalid(self): + with pytest.raises(TypeError): + RequestsOpenAPIResponse(None) + def test_invalid_server(self, response_factory): data = "Not Found" status_code = 404