Python 3: Get compatible types from six
* Replace unicode with six.text_type * Replace basestring with six.string_types * The long type doesn't exist in Python 3 anymore: replace 1L with long(1) and only test this type with Python 2 * Fix quote(): quote the URL if the string is a byte string. Use "bytes" type instead of "str" to be Python 3 compatible. Change-Id: I1df5aa85e4e7d07191fb5c654d52fc4bd8b9f440
This commit is contained in:
parent
cdf6f84c36
commit
12f86fdcc5
@ -28,6 +28,7 @@ from requests.exceptions import RequestException, SSLError
|
|||||||
from urllib import quote as _quote
|
from urllib import quote as _quote
|
||||||
from urlparse import urlparse, urlunparse
|
from urlparse import urlparse, urlunparse
|
||||||
from time import sleep, time
|
from time import sleep, time
|
||||||
|
import six
|
||||||
|
|
||||||
from swiftclient.exceptions import ClientException, InvalidHeadersException
|
from swiftclient.exceptions import ClientException, InvalidHeadersException
|
||||||
from swiftclient.utils import LengthWrapper
|
from swiftclient.utils import LengthWrapper
|
||||||
@ -97,7 +98,7 @@ 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
|
||||||
"""
|
"""
|
||||||
value = encode_utf8(value)
|
value = encode_utf8(value)
|
||||||
if isinstance(value, str):
|
if isinstance(value, bytes):
|
||||||
return _quote(value, safe)
|
return _quote(value, safe)
|
||||||
else:
|
else:
|
||||||
return value
|
return value
|
||||||
@ -117,7 +118,7 @@ def validate_headers(headers):
|
|||||||
|
|
||||||
|
|
||||||
def encode_utf8(value):
|
def encode_utf8(value):
|
||||||
if isinstance(value, unicode):
|
if isinstance(value, six.text_type):
|
||||||
value = value.encode('utf8')
|
value = value.encode('utf8')
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
"""Miscellaneous utility functions for use with Swift."""
|
"""Miscellaneous utility functions for use with Swift."""
|
||||||
|
|
||||||
|
import six
|
||||||
|
|
||||||
TRUE_VALUES = set(('true', '1', 'yes', 'on', 't', 'y'))
|
TRUE_VALUES = set(('true', '1', 'yes', 'on', 't', 'y'))
|
||||||
|
|
||||||
|
|
||||||
@ -24,7 +26,7 @@ def config_true_value(value):
|
|||||||
This function come from swift.common.utils.config_true_value()
|
This function come from swift.common.utils.config_true_value()
|
||||||
"""
|
"""
|
||||||
return value is True or \
|
return value is True or \
|
||||||
(isinstance(value, basestring) and value.lower() in TRUE_VALUES)
|
(isinstance(value, six.string_types) and value.lower() in TRUE_VALUES)
|
||||||
|
|
||||||
|
|
||||||
def prt_bytes(bytes, human_flag):
|
def prt_bytes(bytes, human_flag):
|
||||||
|
@ -177,9 +177,9 @@ class TestHttpHelpers(MockHttpTest):
|
|||||||
|
|
||||||
def test_quote(self):
|
def test_quote(self):
|
||||||
value = 'standard string'
|
value = 'standard string'
|
||||||
self.assertEqual('standard%20string', c.quote(value))
|
self.assertEqual(b'standard%20string', c.quote(value))
|
||||||
value = u'\u0075nicode string'
|
value = u'\u0075nicode string'
|
||||||
self.assertEqual('unicode%20string', c.quote(value))
|
self.assertEqual(b'unicode%20string', c.quote(value))
|
||||||
|
|
||||||
def test_http_connection(self):
|
def test_http_connection(self):
|
||||||
url = 'http://www.test.com'
|
url = 'http://www.test.com'
|
||||||
@ -204,7 +204,10 @@ class TestHttpHelpers(MockHttpTest):
|
|||||||
headers)
|
headers)
|
||||||
|
|
||||||
def test_validate_headers_with_other_than_str(self):
|
def test_validate_headers_with_other_than_str(self):
|
||||||
for t in (None, 1, 1.0, 1L, u"A"):
|
values = [None, 1, 1.0, u"A"]
|
||||||
|
if six.PY2:
|
||||||
|
values.append(long(1))
|
||||||
|
for t in values:
|
||||||
self.assertEqual(c.validate_headers({'key': t}),
|
self.assertEqual(c.validate_headers({'key': t}),
|
||||||
None)
|
None)
|
||||||
|
|
||||||
@ -572,7 +575,7 @@ class TestPutObject(MockHttpTest):
|
|||||||
c.http_connection = self.fake_http_connection(200)
|
c.http_connection = self.fake_http_connection(200)
|
||||||
args = ('http://www.test.com', 'asdf', 'asdf', 'asdf', 'asdf')
|
args = ('http://www.test.com', 'asdf', 'asdf', 'asdf', 'asdf')
|
||||||
value = c.put_object(*args)
|
value = c.put_object(*args)
|
||||||
self.assertTrue(isinstance(value, basestring))
|
self.assertTrue(isinstance(value, six.string_types))
|
||||||
|
|
||||||
def test_unicode_ok(self):
|
def test_unicode_ok(self):
|
||||||
conn = c.http_connection(u'http://www.test.com/')
|
conn = c.http_connection(u'http://www.test.com/')
|
||||||
@ -589,7 +592,7 @@ class TestPutObject(MockHttpTest):
|
|||||||
conn[1].getresponse = resp.fake_response
|
conn[1].getresponse = resp.fake_response
|
||||||
conn[1]._request = resp._fake_request
|
conn[1]._request = resp._fake_request
|
||||||
value = c.put_object(*args, headers=headers, http_conn=conn)
|
value = c.put_object(*args, headers=headers, http_conn=conn)
|
||||||
self.assertTrue(isinstance(value, basestring))
|
self.assertTrue(isinstance(value, six.string_types))
|
||||||
# Test for RFC-2616 encoded symbols
|
# Test for RFC-2616 encoded symbols
|
||||||
self.assertTrue("a-b: .x:yz mn:fg:lp" in resp.buffer[0],
|
self.assertTrue("a-b: .x:yz mn:fg:lp" in resp.buffer[0],
|
||||||
"[a-b: .x:yz mn:fg:lp] header is missing")
|
"[a-b: .x:yz mn:fg:lp] header is missing")
|
||||||
@ -969,7 +972,7 @@ class TestLogging(MockHttpTest):
|
|||||||
c.http_connection = self.fake_http_connection(200)
|
c.http_connection = self.fake_http_connection(200)
|
||||||
args = ('http://www.test.com', 'asdf', 'asdf', 'asdf', 'asdf')
|
args = ('http://www.test.com', 'asdf', 'asdf', 'asdf', 'asdf')
|
||||||
value = c.put_object(*args)
|
value = c.put_object(*args)
|
||||||
self.assertTrue(isinstance(value, basestring))
|
self.assertTrue(isinstance(value, six.string_types))
|
||||||
|
|
||||||
def test_head_error(self):
|
def test_head_error(self):
|
||||||
c.http_connection = self.fake_http_connection(500)
|
c.http_connection = self.fake_http_connection(500)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user