Skip to content

Commit b6bf410

Browse files
committed
fix: preserve custom CookiePolicy in Session.prepare_request
Use _copy_cookie_jar to preserve the session's CookiePolicy when preparing requests, instead of creating a new RequestsCookieJar with the default policy. Fixes #7122, #3416
1 parent 7029833 commit b6bf410

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/requests/sessions.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from .compat import Mapping, cookielib, urljoin, urlparse
1818
from .cookies import (
1919
RequestsCookieJar,
20+
_copy_cookie_jar,
2021
cookiejar_from_dict,
2122
extract_cookies_to_jar,
2223
merge_cookies,
@@ -472,7 +473,7 @@ def prepare_request(self, request):
472473

473474
# Merge with session cookies
474475
merged_cookies = merge_cookies(
475-
merge_cookies(RequestsCookieJar(), self.cookies), cookies
476+
_copy_cookie_jar(self.cookies), cookies
476477
)
477478

478479
# Set environment's basic authentication if not explicitly set.

tests/test_requests.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,26 @@ def test_cookielib_cookiejar_on_redirect(self, httpbin):
469469
assert cookies["foo"] == "bar"
470470
assert cookies["cookie"] == "tasty"
471471

472+
def test_cookie_policy_preserved_on_prepare_request(self):
473+
"""Tests that custom CookiePolicy is preserved in Session.prepare_request.
474+
475+
See GH #3416
476+
"""
477+
478+
class TestCookiePolicy(cookielib.DefaultCookiePolicy):
479+
pass
480+
481+
jar = requests.cookies.RequestsCookieJar(policy=TestCookiePolicy())
482+
s = requests.Session()
483+
s.cookies = jar
484+
485+
assert isinstance(s.cookies.get_policy(), TestCookiePolicy)
486+
487+
req = requests.Request("GET", "https://example.com/")
488+
prepared = s.prepare_request(req)
489+
490+
assert isinstance(prepared._cookies.get_policy(), TestCookiePolicy)
491+
472492
def test_requests_in_history_are_not_overridden(self, httpbin):
473493
resp = requests.get(httpbin("redirect/3"))
474494
urls = [r.url for r in resp.history]

0 commit comments

Comments
 (0)