From 73689cb3d3e51023fd30c4714c2c540b4b6c932e Mon Sep 17 00:00:00 2001
From: p1c2u <maciag.artur@gmail.com>
Date: Fri, 27 Jan 2023 03:31:32 +0000
Subject: [PATCH] Fix Requests request dont allow fragments

---
 openapi_core/contrib/requests/requests.py     |  2 +-
 .../requests/test_requests_requests.py        | 27 +++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/openapi_core/contrib/requests/requests.py b/openapi_core/contrib/requests/requests.py
index d543fec9..90feaad8 100644
--- a/openapi_core/contrib/requests/requests.py
+++ b/openapi_core/contrib/requests/requests.py
@@ -34,7 +34,7 @@ def __init__(self, request: Union[Request, PreparedRequest]):
         self.request = request
         if request.url is None:
             raise RuntimeError("Request URL is missing")
-        self._url_parsed = urlparse(request.url)
+        self._url_parsed = urlparse(request.url, allow_fragments=False)
 
         cookie = {}
         if isinstance(self.request, SupportsCookieJar) and isinstance(
diff --git a/tests/unit/contrib/requests/test_requests_requests.py b/tests/unit/contrib/requests/test_requests_requests.py
index 6d3a7982..45bfbdf8 100644
--- a/tests/unit/contrib/requests/test_requests_requests.py
+++ b/tests/unit/contrib/requests/test_requests_requests.py
@@ -88,3 +88,30 @@ def test_url_rule(self, request_factory, request):
         assert openapi_request.path == "/browse/12/"
         assert openapi_request.body == prepared.body
         assert openapi_request.mimetype == "application/json"
+
+    def test_hash_param(self, request_factory, request):
+        request = request_factory("GET", "/browse/#12", subdomain="kb")
+
+        openapi_request = RequestsOpenAPIRequest(request)
+
+        # empty when not bound to spec
+        path = {}
+        query = ImmutableMultiDict([])
+        headers = Headers(
+            {
+                "Content-Type": "application/json",
+            }
+        )
+        cookies = {}
+        assert openapi_request.parameters == RequestParameters(
+            path=path,
+            query=query,
+            header=headers,
+            cookie=cookies,
+        )
+        prepared = request.prepare()
+        assert openapi_request.method == request.method.lower()
+        assert openapi_request.host_url == "http://localhost"
+        assert openapi_request.path == "/browse/#12"
+        assert openapi_request.body == prepared.body
+        assert openapi_request.mimetype == "application/json"