From a6f5082344add19d75e0f2c59b962f6caf9c4a3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jitka=20Novotn=C3=A1?= Date: Tue, 11 Apr 2023 13:38:27 +0200 Subject: [PATCH 1/2] strip Request mimetype --- openapi_core/contrib/requests/requests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openapi_core/contrib/requests/requests.py b/openapi_core/contrib/requests/requests.py index 70ae3fd2..00a462f5 100644 --- a/openapi_core/contrib/requests/requests.py +++ b/openapi_core/contrib/requests/requests.py @@ -80,7 +80,7 @@ def mimetype(self) -> str: return str( self.request.headers.get("Content-Type") or self.request.headers.get("Accept") - ) + ).split(";")[0] class RequestsOpenAPIWebhookRequest(RequestsOpenAPIRequest): From 218d07fdf404a8d1ae70991abb0911e6ea9242ff Mon Sep 17 00:00:00 2001 From: p1c2u Date: Tue, 11 Apr 2023 15:39:03 +0100 Subject: [PATCH 2/2] strip Request mimetype test --- tests/unit/contrib/requests/conftest.py | 10 +++++-- .../requests/test_requests_requests.py | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/tests/unit/contrib/requests/conftest.py b/tests/unit/contrib/requests/conftest.py index 57f032df..65b2c913 100644 --- a/tests/unit/contrib/requests/conftest.py +++ b/tests/unit/contrib/requests/conftest.py @@ -14,12 +14,18 @@ def request_factory(): schema = "http" server_name = "localhost" - def create_request(method, path, subdomain=None, query_string=""): + def create_request( + method, + path, + subdomain=None, + query_string="", + content_type="application/json", + ): base_url = "://".join([schema, server_name]) url = urljoin(base_url, path) params = parse_qs(query_string) headers = { - "Content-Type": "application/json", + "Content-Type": content_type, } return Request(method, url, params=params, headers=headers) diff --git a/tests/unit/contrib/requests/test_requests_requests.py b/tests/unit/contrib/requests/test_requests_requests.py index 762a115a..a09cd5d6 100644 --- a/tests/unit/contrib/requests/test_requests_requests.py +++ b/tests/unit/contrib/requests/test_requests_requests.py @@ -115,3 +115,30 @@ def test_hash_param(self, request_factory, request): assert openapi_request.path == "/browse/#12" assert openapi_request.body == prepared.body assert openapi_request.mimetype == "application/json" + + def test_content_type_with_charset(self, request_factory, request): + request = request_factory( + "GET", + "/", + subdomain="www", + content_type="application/json; charset=utf-8", + ) + + openapi_request = RequestsOpenAPIRequest(request) + + path = {} + query = ImmutableMultiDict([]) + headers = Headers(dict(request.headers)) + cookies = {} + prepared = request.prepare() + assert openapi_request.parameters == RequestParameters( + path=path, + query=query, + header=headers, + cookie=cookies, + ) + assert openapi_request.method == request.method.lower() + assert openapi_request.host_url == "http://localhost" + assert openapi_request.path == "/" + assert openapi_request.body == prepared.body + assert openapi_request.mimetype == "application/json"