From 08cebb3c2fb3b3a4164a8e38435ab30b2ddaaa73 Mon Sep 17 00:00:00 2001 From: Matthias Rahlf Date: Tue, 10 Jul 2012 01:06:02 +0200 Subject: [PATCH] fixed param handling in Request.full_url --- AUTHORS.rst | 1 + requests/models.py | 10 +++++----- tests/test_requests.py | 10 ++++++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index dc73b64c..915826a0 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -105,3 +105,4 @@ Patches and Suggestions - Danilo Bargen (gwrtheyrn) - Torsten Landschoff - Michael Holler (apotheos) +- Matthias Rahlf diff --git a/requests/models.py b/requests/models.py index 694d62a1..f7995815 100644 --- a/requests/models.py +++ b/requests/models.py @@ -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) diff --git a/tests/test_requests.py b/tests/test_requests.py index d9a820d2..35632bdd 100755 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -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)