diff options
author | Victor Stinner <victor.stinner@enovance.com> | 2014-03-31 12:40:24 +0200 |
---|---|---|
committer | Victor Stinner <victor.stinner@enovance.com> | 2014-04-07 10:30:18 +0200 |
commit | 155053ea61bb7a9afc19dc289886231e238bb298 (patch) | |
tree | 5ec7ccf332dfcbdc71549df84a09efb15fb7f189 | |
parent | c5cc2b7b7e90edfa41d35ccf1dac13e0f7ac2da0 (diff) | |
download | python-swiftclient-155053ea61bb7a9afc19dc289886231e238bb298.tar.gz |
Fix swiftclient.client.quote() for Python 3
On Python 3, urllib.parse.quote() accepts bytes and str (unicode) types and
always return str (unicode).
Add also more tests with non-ASCII characters.
Change-Id: I8e0f19da7240e874392327d0da074ed4abb7d213
-rw-r--r-- | swiftclient/client.py | 5 | ||||
-rw-r--r-- | tests/test_swiftclient.py | 12 |
2 files changed, 12 insertions, 5 deletions
diff --git a/swiftclient/client.py b/swiftclient/client.py index 01dbaa1..2766461 100644 --- a/swiftclient/client.py +++ b/swiftclient/client.py @@ -97,8 +97,11 @@ def http_log(args, kwargs, resp, body): def quote(value, safe='/'): """ - Patched version of urllib.quote that encodes utf8 strings before quoting + Patched version of urllib.quote that encodes utf8 strings before quoting. + On Python 3, call directly urllib.parse.quote(). """ + if six.PY3: + return _quote(value, safe=safe) value = encode_utf8(value) if isinstance(value, bytes): return _quote(value, safe) diff --git a/tests/test_swiftclient.py b/tests/test_swiftclient.py index 80f074c..f18856d 100644 --- a/tests/test_swiftclient.py +++ b/tests/test_swiftclient.py @@ -182,10 +182,14 @@ class MockHttpResponse(): class TestHttpHelpers(MockHttpTest): def test_quote(self): - value = 'standard string' - self.assertEqual(b'standard%20string', c.quote(value)) - value = u'\u0075nicode string' - self.assertEqual(b'unicode%20string', c.quote(value)) + value = b'bytes\xff' + self.assertEqual('bytes%FF', c.quote(value)) + value = 'native string' + self.assertEqual('native%20string', c.quote(value)) + value = u'unicode string' + self.assertEqual('unicode%20string', c.quote(value)) + value = u'unicode:\xe9\u20ac' + self.assertEqual('unicode%3A%C3%A9%E2%82%AC', c.quote(value)) def test_http_connection(self): url = 'http://www.test.com' |