From e283a64dac5a10d661cd7b28ae8dfedbf6643e19 Mon Sep 17 00:00:00 2001 From: Cycloctane Date: Mon, 2 Dec 2024 20:56:32 +0800 Subject: [PATCH 1/9] add quote_cookie getter to cookiejar --- aiohttp/abc.py | 5 +++++ aiohttp/cookiejar.py | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/aiohttp/abc.py b/aiohttp/abc.py index feeb3ad65c9..698ad3cad1b 100644 --- a/aiohttp/abc.py +++ b/aiohttp/abc.py @@ -171,6 +171,11 @@ async def close(self) -> None: class AbstractCookieJar(Sized, IterableBase): """Abstract Cookie Jar.""" + @property + @abstractmethod + def quote_cookie(self) -> bool: + """Return True if cookies should be quoted.""" + @abstractmethod def clear(self, predicate: Optional[ClearCookiePredicate] = None) -> None: """Clear all cookies if no predicate is passed.""" diff --git a/aiohttp/cookiejar.py b/aiohttp/cookiejar.py index 1523bed72ee..158d6d103ab 100644 --- a/aiohttp/cookiejar.py +++ b/aiohttp/cookiejar.py @@ -118,6 +118,10 @@ def __init__( self._expire_heap: List[Tuple[float, Tuple[str, str, str]]] = [] self._expirations: Dict[Tuple[str, str, str], float] = {} + @property + def quote_cookie(self) -> bool: + return self._quote_cookie + def save(self, file_path: PathLike) -> None: file_path = pathlib.Path(file_path) with file_path.open(mode="wb") as f: @@ -471,6 +475,10 @@ def __iter__(self) -> "Iterator[Morsel[str]]": def __len__(self) -> int: return 0 + @property + def quote_cookie(self) -> bool: + return True + def clear(self, predicate: Optional[ClearCookiePredicate] = None) -> None: pass From af54f4879f36bdaa5a869037add0b272214048e3 Mon Sep 17 00:00:00 2001 From: Cycloctane Date: Mon, 2 Dec 2024 20:57:53 +0800 Subject: [PATCH 2/9] reuse clientsession's CookieJar setting when creating temporary CookieJar --- aiohttp/client.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aiohttp/client.py b/aiohttp/client.py index 16c8c749ea0..345e7be570c 100644 --- a/aiohttp/client.py +++ b/aiohttp/client.py @@ -601,7 +601,9 @@ async def _request( all_cookies = self._cookie_jar.filter_cookies(url) if cookies is not None: - tmp_cookie_jar = CookieJar() + tmp_cookie_jar = CookieJar( + quote_cookie=self._cookie_jar.quote_cookie + ) tmp_cookie_jar.update_cookies(cookies) req_cookies = tmp_cookie_jar.filter_cookies(url) if req_cookies: From 5613ea0d7551e596de55d77f826cb8f0a9c6aa5f Mon Sep 17 00:00:00 2001 From: Cycloctane Date: Mon, 2 Dec 2024 22:01:05 +0800 Subject: [PATCH 3/9] fix test --- tests/test_client_session.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_client_session.py b/tests/test_client_session.py index 8ea0ed6c345..a5201736a54 100644 --- a/tests/test_client_session.py +++ b/tests/test_client_session.py @@ -696,7 +696,6 @@ async def handler(request: web.Request) -> web.Response: assert resp_cookies["response"].value == "resp_value" -@pytest.mark.xfail(reason="Reproducer for #9336") async def test_cookies_with_not_quoted_cookie_jar( aiohttp_server: AiohttpServer, ) -> None: From 1bbfecdd30878d281851f54980d5ad3ffb6e960a Mon Sep 17 00:00:00 2001 From: Cycloctane Date: Mon, 2 Dec 2024 23:17:38 +0800 Subject: [PATCH 4/9] update changelog --- CHANGES/10093.bugfix.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 CHANGES/10093.bugfix.rst diff --git a/CHANGES/10093.bugfix.rst b/CHANGES/10093.bugfix.rst new file mode 100644 index 00000000000..f78152b67e5 --- /dev/null +++ b/CHANGES/10093.bugfix.rst @@ -0,0 +1,2 @@ +Update :py:meth:`~aiohttp.ClientSession.request` to reuse the ``quote_cookie`` setting from :py:attr:`~aiohttp.ClientSession._cookie_jar` when processing cookies parameter. +-- by :user:`Cycloctane`. \ No newline at end of file From 61a042eca93b2a62f226903edfc7964e78737b85 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:18:22 +0000 Subject: [PATCH 5/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- CHANGES/10093.bugfix.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES/10093.bugfix.rst b/CHANGES/10093.bugfix.rst index f78152b67e5..a7adcbedc4c 100644 --- a/CHANGES/10093.bugfix.rst +++ b/CHANGES/10093.bugfix.rst @@ -1,2 +1,2 @@ Update :py:meth:`~aiohttp.ClientSession.request` to reuse the ``quote_cookie`` setting from :py:attr:`~aiohttp.ClientSession._cookie_jar` when processing cookies parameter. --- by :user:`Cycloctane`. \ No newline at end of file +-- by :user:`Cycloctane`. From bbc9fe4d5bea39de9bb196ed97768e5d5bf34403 Mon Sep 17 00:00:00 2001 From: Cycloctane Date: Thu, 5 Dec 2024 10:20:41 +0800 Subject: [PATCH 6/9] add test --- tests/test_cookiejar.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_cookiejar.py b/tests/test_cookiejar.py index 0821bcc5fcb..8bf1ecde8cf 100644 --- a/tests/test_cookiejar.py +++ b/tests/test_cookiejar.py @@ -831,6 +831,7 @@ async def make_jar() -> CookieJar: async def test_dummy_cookie_jar() -> None: cookie = SimpleCookie("foo=bar; Domain=example.com;") dummy_jar = DummyCookieJar() + assert dummy_jar.quote_cookie is True assert len(dummy_jar) == 0 dummy_jar.update_cookies(cookie) assert len(dummy_jar) == 0 From 8532f391ff623af0a7b7e467dbb72a352eb53c7c Mon Sep 17 00:00:00 2001 From: Cycloctane Date: Thu, 5 Dec 2024 10:48:18 +0800 Subject: [PATCH 7/9] fix change log --- CHANGES/10093.bugfix.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES/10093.bugfix.rst b/CHANGES/10093.bugfix.rst index a7adcbedc4c..8abacbb6c62 100644 --- a/CHANGES/10093.bugfix.rst +++ b/CHANGES/10093.bugfix.rst @@ -1,2 +1,2 @@ -Update :py:meth:`~aiohttp.ClientSession.request` to reuse the ``quote_cookie`` setting from :py:attr:`~aiohttp.ClientSession._cookie_jar` when processing cookies parameter. +Update :py:meth:`~aiohttp.ClientSession.request` to reuse the ``quote_cookie`` setting from session cookie jar when processing cookies parameter. -- by :user:`Cycloctane`. From d3bd9d1435c8db0796b251827f597c435b48a57c Mon Sep 17 00:00:00 2001 From: Cycloctane Date: Thu, 5 Dec 2024 10:50:05 +0800 Subject: [PATCH 8/9] update changelog --- CHANGES/10093.bugfix.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES/10093.bugfix.rst b/CHANGES/10093.bugfix.rst index 8abacbb6c62..5b0cee2b160 100644 --- a/CHANGES/10093.bugfix.rst +++ b/CHANGES/10093.bugfix.rst @@ -1,2 +1,2 @@ -Update :py:meth:`~aiohttp.ClientSession.request` to reuse the ``quote_cookie`` setting from session cookie jar when processing cookies parameter. +Update :py:meth:`~aiohttp.ClientSession.request` to reuse the ``quote_cookie`` setting from session's cookiejar when processing cookies parameter. -- by :user:`Cycloctane`. From db440ac00417a68a7458b329718ac6c931e7135b Mon Sep 17 00:00:00 2001 From: Cycloctane Date: Thu, 5 Dec 2024 12:01:28 +0800 Subject: [PATCH 9/9] update changelog --- CHANGES/10093.bugfix.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES/10093.bugfix.rst b/CHANGES/10093.bugfix.rst index 5b0cee2b160..4d7076115d9 100644 --- a/CHANGES/10093.bugfix.rst +++ b/CHANGES/10093.bugfix.rst @@ -1,2 +1,2 @@ -Update :py:meth:`~aiohttp.ClientSession.request` to reuse the ``quote_cookie`` setting from session's cookiejar when processing cookies parameter. +Update :py:meth:`~aiohttp.ClientSession.request` to reuse the ``quote_cookie`` setting from ``ClientSession._cookie_jar`` when processing cookies parameter. -- by :user:`Cycloctane`.