Make sure session cookies do not overwrite explicit request cookies

Implement RequestsCookieJar.copy
Use RequestsCookieJar.update when merging cookiejars
This commit is contained in:
Chase Sterling
2013-02-16 00:56:59 -05:00
parent d0390d4f27
commit 3f86e22a07
3 changed files with 10 additions and 9 deletions
+4 -2
View File
@@ -307,8 +307,10 @@ class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping):
self._cookies_lock = threading.RLock()
def copy(self):
"""This is not implemented. Calling this will throw an exception."""
raise NotImplementedError
"""Return a copy of this RequestsCookieJar."""
new_cj = RequestsCookieJar()
new_cj.update(self)
return new_cj
def create_cookie(name, value, **kwargs):
+5 -5
View File
@@ -251,9 +251,10 @@ class Session(SessionRedirectMixin):
if not isinstance(cookies, cookielib.CookieJar):
cookies = cookiejar_from_dict(cookies)
# Bubble down session cookies.
for cookie in self.cookies:
cookies.set_cookie(cookie)
# Merge with session cookies
merged_cookies = self.cookies.copy()
merged_cookies.update(cookies)
cookies = merged_cookies
# Gather clues from the surrounding environment.
if self.trust_env:
@@ -312,8 +313,7 @@ class Session(SessionRedirectMixin):
resp = self.send(prep, **send_kwargs)
# Persist cookies.
for cookie in resp.cookies:
self.cookies.set_cookie(cookie)
self.cookies.update(resp.cookies)
return resp
+1 -2
View File
@@ -252,8 +252,7 @@ def add_dict_to_cookiejar(cj, cookie_dict):
"""
cj2 = cookiejar_from_dict(cookie_dict)
for cookie in cj2:
cj.set_cookie(cookie)
cj.update(cj2)
return cj