fix params support
authorKenneth Reitz <me@kennethreitz.com>
Mon, 17 Dec 2012 10:23:22 +0000 (05:23 -0500)
committerKenneth Reitz <me@kennethreitz.com>
Mon, 17 Dec 2012 10:23:22 +0000 (05:23 -0500)
requests/models.py
requests/sessions.py

index 8d56456..741959a 100644 (file)
@@ -257,7 +257,7 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
             pass
 
         # Support for unicode domain names and paths.
-        scheme, netloc, path, params, query, fragment = urlparse(url)
+        scheme, netloc, path, _params, query, fragment = urlparse(url)
 
         if not scheme:
             raise MissingSchema("Invalid URL %r: No schema supplied" % url)
@@ -278,8 +278,8 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
                 netloc = netloc.encode('utf-8')
             if isinstance(path, str):
                 path = path.encode('utf-8')
-            if isinstance(params, str):
-                params = params.encode('utf-8')
+            if isinstance(_params, str):
+                _params = _params.encode('utf-8')
             if isinstance(query, str):
                 query = query.encode('utf-8')
             if isinstance(fragment, str):
@@ -292,7 +292,7 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
             else:
                 query = enc_params
 
-        url = requote_uri(urlunparse([scheme, netloc, path, params, query, fragment]))
+        url = requote_uri(urlunparse([scheme, netloc, path, _params, query, fragment]))
         self.url = url
 
     def prepare_headers(self, headers):
index b7526c4..78b0da3 100644 (file)
@@ -186,7 +186,7 @@ class Session(SessionRedirectMixin):
         params=None,
         data=None,
         headers=None,
-        cookies=None,
+        cookies=None or {},
         files=None,
         auth=None,
         timeout=None,
@@ -198,6 +198,39 @@ class Session(SessionRedirectMixin):
         verify=None,
         cert=None):
 
+
+        # merge session cookies into passed-in ones
+        dead_cookies = None
+        # passed-in cookies must become a CookieJar:
+        if not isinstance(cookies, cookielib.CookieJar):
+            cookies = cookiejar_from_dict(cookies)
+            # support unsetting cookies that have been passed in with None values
+            # this is only meaningful when `cookies` is a dict ---
+            # for a real CookieJar, the client should use session.cookies.clear()
+            if cookies is not None:
+                dead_cookies = [name for name in cookies if cookies[name] is None]
+        # merge the session's cookies into the passed-in cookies:
+        for cookie in self.cookies:
+            cookies.set_cookie(cookie)
+        # remove the unset cookies from the jar we'll be using with the current request
+        # (but not from the session's own store of cookies):
+        if dead_cookies is not None:
+            for name in dead_cookies:
+                remove_cookie_by_name(cookies, name)
+
+        # Merge local kwargs with session kwargs.
+        for attr in self.__attrs__:
+            # we already merged cookies:
+            if attr == 'cookies':
+                continue
+
+            session_val = getattr(self, attr, None)
+            local_val = locals().get(attr)
+            locals()[attr] = merge_kwargs(local_val, session_val)
+
+
+        headers = merge_kwargs(headers, self.headers)
+
         req = Request()
         req.method = method
         req.url = url