diff options
author | MinRK <benjaminrk@gmail.com> | 2014-10-05 16:30:11 -0700 |
---|---|---|
committer | MinRK <benjaminrk@gmail.com> | 2014-10-05 16:30:11 -0700 |
commit | ca2ebc5b682452bc870efb2f7123feda9a80a8ea (patch) | |
tree | d5ffd89b801f0f573f384feef67522f383612a11 | |
parent | 5850b1f53b98ba48c23432475b246cddf9f489d4 (diff) | |
download | python-requests-ca2ebc5b682452bc870efb2f7123feda9a80a8ea.tar.gz |
allow unicode URLs on Python 2
on Python 2 u'é'.decode('utf8') fails with UnicodeEncodeError,
but only AttributeError is caught.
This only calls decode on known bytes objects.
-rw-r--r-- | requests/models.py | 4 | ||||
-rwxr-xr-x | test_requests.py | 8 |
2 files changed, 10 insertions, 2 deletions
diff --git a/requests/models.py b/requests/models.py index 245521dc..aaa50632 100644 --- a/requests/models.py +++ b/requests/models.py @@ -338,9 +338,9 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): #: as this will include the bytestring indicator (b'') #: on python 3.x. #: https://github.com/kennethreitz/requests/pull/2238 - try: + if isinstance(url, bytes): url = url.decode('utf8') - except AttributeError: + else: url = unicode(url) if is_py2 else str(url) # Don't do any URL preparation for non-HTTP schemes like `mailto`, diff --git a/test_requests.py b/test_requests.py index 8864b2d1..0d93893b 100755 --- a/test_requests.py +++ b/test_requests.py @@ -1507,5 +1507,13 @@ def test_prepared_request_complete_copy(): ) assert_copy(p, p.copy()) +def test_prepare_unicode_url(): + p = PreparedRequest() + p.prepare( + method='GET', + url=u('http://www.example.com/üniçø∂é') + ) + assert_copy(p, p.copy()) + if __name__ == '__main__': unittest.main() |