added new method 'merge_cookies' and use it when merging session cookies with param...
authordaftshady <daftonshady@gmail.com>
Tue, 5 Nov 2013 07:09:49 +0000 (16:09 +0900)
committerdaftshady <daftonshady@gmail.com>
Tue, 26 Nov 2013 06:28:59 +0000 (15:28 +0900)
requests/cookies.py
requests/sessions.py

index a4140ad..45c4685 100644 (file)
@@ -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
index a5cb897..c8d8c71 100644 (file)
@@ -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 {}