diff --git a/CHANGES/9870.misc.rst b/CHANGES/9870.misc.rst new file mode 100644 index 00000000000..caa8f45e522 --- /dev/null +++ b/CHANGES/9870.misc.rst @@ -0,0 +1 @@ +Added support for the ``partitioned`` attribute in the ``set_cookie`` method. diff --git a/aiohttp/helpers.py b/aiohttp/helpers.py index f04b74833bc..7f6506939f4 100644 --- a/aiohttp/helpers.py +++ b/aiohttp/helpers.py @@ -940,6 +940,7 @@ def set_cookie( secure: Optional[bool] = None, httponly: Optional[bool] = None, samesite: Optional[str] = None, + partitioned: Optional[bool] = None, ) -> None: """Set or update response cookie. @@ -974,6 +975,9 @@ def set_cookie( if samesite is not None: c["samesite"] = samesite + if partitioned is not None: + c["partitioned"] = partitioned + if DEBUG: cookie_length = len(c.output(header="")[1:]) if cookie_length > COOKIE_MAX_LENGTH: diff --git a/docs/web_reference.rst b/docs/web_reference.rst index f9d1d5e839e..7f661f44f71 100644 --- a/docs/web_reference.rst +++ b/docs/web_reference.rst @@ -705,7 +705,8 @@ and :ref:`aiohttp-web-signals` handlers:: .. method:: set_cookie(name, value, *, path='/', expires=None, \ domain=None, max_age=None, \ - secure=None, httponly=None, samesite=None) + secure=None, httponly=None, samesite=None, \ + partitioned=None) Convenient way for setting :attr:`cookies`, allows to specify some additional properties like *max_age* in a single call. @@ -753,6 +754,11 @@ and :ref:`aiohttp-web-signals` handlers:: .. versionadded:: 3.7 + :param bool partitioned: ``True`` to set a partitioned cookie. + Available in Python 3.14+. (optional) + + .. versionadded:: 3.12 + .. method:: del_cookie(name, *, path='/', domain=None) Deletes cookie. diff --git a/tests/test_helpers.py b/tests/test_helpers.py index 69f57957c88..80d3a0e355e 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -976,6 +976,19 @@ def test_cookies_mixin_path() -> None: ) +@pytest.mark.skipif(sys.version_info < (3, 14), reason="No partitioned support") +def test_cookies_mixin_partitioned() -> None: + sut = CookieImplementation() + + assert sut.cookies == {} + + sut.set_cookie("name", "value", partitioned=False) + assert str(sut.cookies) == "Set-Cookie: name=value; Path=/" + + sut.set_cookie("name", "value", partitioned=True) + assert str(sut.cookies) == "Set-Cookie: name=value; Partitioned; Path=/" + + def test_sutonse_cookie__issue_del_cookie() -> None: sut = CookieImplementation()