fixed param handling in Request.full_url
authorMatthias Rahlf <matthias@webding.de>
Mon, 9 Jul 2012 23:06:02 +0000 (01:06 +0200)
committerMatthias Rahlf <matthias@webding.de>
Mon, 9 Jul 2012 23:06:02 +0000 (01:06 +0200)
AUTHORS.rst
requests/models.py
tests/test_requests.py

index dc73b64c0bb585b8e420b2f6d6aa66e842d01161..915826a0445d32b9f12dae57fb886d55d9c5608f 100644 (file)
@@ -105,3 +105,4 @@ Patches and Suggestions
 - Danilo Bargen (gwrtheyrn)
 - Torsten Landschoff
 - Michael Holler (apotheos)
+- Matthias Rahlf <matthias@webding.de>
index 694d62a1cbb589fcb790a86809b862c8f96cb2f5..f7995815ac0d1dd27ccd2f9e540b33db727104fe 100644 (file)
@@ -395,14 +395,14 @@ class Request(object):
             if isinstance(fragment, str):
                 fragment = fragment.encode('utf-8')
 
-        url = (urlunparse([scheme, netloc, path, params, query, fragment]))
-
         enc_params = self._encode_params(self.params)
         if enc_params:
-            if urlparse(url).query:
-                url = '%s&%s' % (url, enc_params)
+            if query:
+                query = '%s&%s' % (query, enc_params)
             else:
-                url = '%s?%s' % (url, enc_params)
+                query = enc_params
+
+        url = (urlunparse([scheme, netloc, path, params, query, fragment]))
 
         if self.config.get('encode_uri', True):
             url = requote_uri(url)
index d9a820d299592ecdd29b9cc354aa77f3d12e6d03..35632bdd093ce83823c9860680cafb15148e37a0 100755 (executable)
@@ -83,6 +83,16 @@ class RequestsTestSuite(TestSetup, TestBaseMixin, unittest.TestCase):
 
         self.assertEqual(request.path_url, "/get/test%20case")
 
+    def test_params_are_added_before_fragment(self):
+        request = requests.Request(
+            "http://example.com/path#fragment", params={"a": "b"})
+        self.assertEqual(request.full_url,
+            "http://example.com/path?a=b#fragment")
+        request = requests.Request(
+            "http://example.com/path?key=value#fragment", params={"a": "b"})
+        self.assertEqual(request.full_url,
+            "http://example.com/path?key=value&a=b#fragment")
+
     def test_HTTP_200_OK_GET(self):
         r = get(httpbin('get'))
         self.assertEqual(r.status_code, 200)