Fixed URI re-encoding on Python 3 (Issue #369).
authorMatt Giuca <matt.giuca@gmail.com>
Tue, 14 Feb 2012 00:50:02 +0000 (11:50 +1100)
committerMatt Giuca <matt.giuca@gmail.com>
Tue, 14 Feb 2012 00:50:02 +0000 (11:50 +1100)
Request.full_url now performs requoting of the path (like it does in Python 2).
Request.path_url no longer quotes the already-quoted path (double quoting).
Fixed utils.requote_path so it works properly in Python 3.

requests/models.py
requests/utils.py

index b72ac64..dcc51b0 100644 (file)
@@ -324,7 +324,7 @@ class Request(object):
             if isinstance(path, str):
                 path = path.encode('utf-8')
 
-            path = requote_path(path)
+        path = requote_path(path)
 
         url = (urlunparse([ scheme, netloc, path, params, query, fragment ]))
 
@@ -352,9 +352,6 @@ class Request(object):
         if not path:
             path = '/'
 
-        if is_py3:
-            path = quote(path.encode('utf-8'))
-
         url.append(path)
 
         query = p.query
index 0f23a52..a773f10 100644 (file)
@@ -403,6 +403,6 @@ def requote_path(path):
     This function passes the given path through an unquote/quote cycle to
     ensure that it is fully and consistently quoted.
     """
-    parts = path.split(b"/")
-    parts = (quote(unquote(part), safe=b"") for part in parts)
-    return b"/".join(parts)
+    parts = path.split("/")
+    parts = (quote(unquote(part), safe="") for part in parts)
+    return "/".join(parts)