summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@enovance.com>2014-03-31 12:40:24 +0200
committerVictor Stinner <victor.stinner@enovance.com>2014-04-07 10:30:18 +0200
commit155053ea61bb7a9afc19dc289886231e238bb298 (patch)
tree5ec7ccf332dfcbdc71549df84a09efb15fb7f189
parentc5cc2b7b7e90edfa41d35ccf1dac13e0f7ac2da0 (diff)
downloadpython-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.py5
-rw-r--r--tests/test_swiftclient.py12
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'