From e40c1637c915e112fabaffb39fcd73beed56ff4b Mon Sep 17 00:00:00 2001 From: daftshady Date: Tue, 5 Nov 2013 16:09:49 +0900 Subject: [PATCH] added new method 'merge_cookies' and use it when merging session cookies with param cookies. --- requests/cookies.py | 19 +++++++++++++++++++ requests/sessions.py | 11 ++++------- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/requests/cookies.py b/requests/cookies.py index a4140ad..45c4685 100644 --- a/requests/cookies.py +++ b/requests/cookies.py @@ -421,3 +421,22 @@ def cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): cookiejar.set_cookie(create_cookie(name, cookie_dict[name])) return cookiejar + + +def merge_cookies(cookiejar, cookies): + """Add cookies to cookiejar and returns a merged CookieJar. + + :param cookiejar: CookieJar object to add the cookies to. + :param cookies: Dictionary or CookieJar object to be added. + """ + if not isinstance(cookiejar, cookielib.CookieJar): + raise ValueError('You can only merge into CookieJar') + + if isinstance(cookies, dict): + cookiejar.update( + cookiejar_from_dict( + cookies, cookiejar=cookiejar, overwrite=False)) + elif isinstance(cookies, cookielib.CookieJar): + cookiejar.update(cookies) + + return cookiejar diff --git a/requests/sessions.py b/requests/sessions.py index a5cb897..c8d8c71 100644 --- a/requests/sessions.py +++ b/requests/sessions.py @@ -12,8 +12,9 @@ import os from collections import Mapping from datetime import datetime -from .compat import cookielib, OrderedDict, urljoin, urlparse, builtin_str -from .cookies import cookiejar_from_dict, extract_cookies_to_jar, RequestsCookieJar +from .compat import cookielib, OrderedDict, urljoin, urlparse, urlunparse, builtin_str +from .cookies import ( + cookiejar_from_dict, extract_cookies_to_jar, RequestsCookieJar, merge_cookies) from .models import Request, PreparedRequest from .hooks import default_hooks, dispatch_hook from .utils import to_key_val_list, default_headers @@ -330,11 +331,7 @@ class Session(SessionRedirectMixin): prep = self.prepare_request(req) # Add param cookies to session cookies - if isinstance(cookies, dict): - self.cookies = cookiejar_from_dict( - cookies, cookiejar=self.cookies, overwrite=False) - elif isinstance(cookies, cookielib.CookieJar): - self.cookies.update(cookies) + self.cookies = merge_cookies(self.cookies, cookies) proxies = proxies or {} -- 2.34.1