Merge "Only encode metadata for user customed headers"
This commit is contained in:
commit
3895d8535a
@ -180,12 +180,26 @@ class HTTPConnection:
|
|||||||
""" Final wrapper before requests call, to be patched in tests """
|
""" Final wrapper before requests call, to be patched in tests """
|
||||||
return self.request_session.request(*arg, **kwarg)
|
return self.request_session.request(*arg, **kwarg)
|
||||||
|
|
||||||
|
def _encode_meta_headers(self, items):
|
||||||
|
"""Only encode metadata headers keys"""
|
||||||
|
ret = {}
|
||||||
|
for header, value in items:
|
||||||
|
value = encode_utf8(value)
|
||||||
|
header = header.lower()
|
||||||
|
for target_type in 'container', 'account', 'object':
|
||||||
|
prefix = 'x-%s-meta-' % target_type
|
||||||
|
if header.startswith(prefix):
|
||||||
|
header = encode_utf8(header)
|
||||||
|
ret[header] = value
|
||||||
|
return ret
|
||||||
|
|
||||||
def request(self, method, full_path, data=None, headers=None, files=None):
|
def request(self, method, full_path, data=None, headers=None, files=None):
|
||||||
""" Encode url and header, then call requests.request """
|
""" Encode url and header, then call requests.request """
|
||||||
if headers is None:
|
if headers is None:
|
||||||
headers = {}
|
headers = {}
|
||||||
headers = dict((encode_utf8(x.lower()), encode_utf8(y)) for x, y in
|
else:
|
||||||
headers.items())
|
headers = self._encode_meta_headers(headers.items())
|
||||||
|
|
||||||
# set a default User-Agent header if it wasn't passed in
|
# set a default User-Agent header if it wasn't passed in
|
||||||
if 'user-agent' not in headers:
|
if 'user-agent' not in headers:
|
||||||
headers['user-agent'] = self.default_user_agent
|
headers['user-agent'] = self.default_user_agent
|
||||||
|
@ -229,7 +229,7 @@ class TestHttpHelpers(MockHttpTest):
|
|||||||
# test if it's actually set
|
# test if it's actually set
|
||||||
conn.request('GET', '/', headers={'User-Agent': 'Me'})
|
conn.request('GET', '/', headers={'User-Agent': 'Me'})
|
||||||
ua = req_headers.get('user-agent', 'XXX-MISSING-XXX')
|
ua = req_headers.get('user-agent', 'XXX-MISSING-XXX')
|
||||||
self.assertEqual(ua, 'Me', req_headers)
|
self.assertEqual(ua, b'Me', req_headers)
|
||||||
|
|
||||||
def test_set_user_agent_default_override(self):
|
def test_set_user_agent_default_override(self):
|
||||||
_junk, conn = c.http_connection(
|
_junk, conn = c.http_connection(
|
||||||
@ -631,10 +631,10 @@ class TestPutObject(MockHttpTest):
|
|||||||
value = c.put_object(*args, headers=headers, http_conn=conn)
|
value = c.put_object(*args, headers=headers, http_conn=conn)
|
||||||
self.assertTrue(isinstance(value, six.string_types))
|
self.assertTrue(isinstance(value, six.string_types))
|
||||||
# Test for RFC-2616 encoded symbols
|
# Test for RFC-2616 encoded symbols
|
||||||
self.assertIn((b"a-b", b".x:yz mn:fg:lp"),
|
self.assertIn(("a-b", b".x:yz mn:fg:lp"),
|
||||||
resp.buffer)
|
resp.buffer)
|
||||||
# Test unicode header
|
# Test unicode header
|
||||||
self.assertIn((b'x-header1', text.encode('utf8')),
|
self.assertIn(('x-header1', text.encode('utf8')),
|
||||||
resp.buffer)
|
resp.buffer)
|
||||||
|
|
||||||
def test_chunk_warning(self):
|
def test_chunk_warning(self):
|
||||||
@ -741,7 +741,7 @@ class TestPostObject(MockHttpTest):
|
|||||||
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/')
|
||||||
args = (u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91',
|
args = (u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91',
|
||||||
'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91',
|
u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91',
|
||||||
u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91',
|
u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91',
|
||||||
u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91')
|
u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91')
|
||||||
text = u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91'
|
text = u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91'
|
||||||
@ -753,9 +753,9 @@ class TestPostObject(MockHttpTest):
|
|||||||
conn[1]._request = resp._fake_request
|
conn[1]._request = resp._fake_request
|
||||||
c.post_object(*args, headers=headers, http_conn=conn)
|
c.post_object(*args, headers=headers, http_conn=conn)
|
||||||
# Test for RFC-2616 encoded symbols
|
# Test for RFC-2616 encoded symbols
|
||||||
self.assertTrue((b'a-b', b"a-b: .x:yz mn:kl:qr"), resp.buffer)
|
self.assertIn(('a-b', b".x:yz mn:kl:qr"), resp.buffer)
|
||||||
# Test unicode header
|
# Test unicode header
|
||||||
self.assertIn((b'x-header1', text.encode('utf8')),
|
self.assertIn(('x-header1', text.encode('utf8')),
|
||||||
resp.buffer)
|
resp.buffer)
|
||||||
|
|
||||||
def test_server_error(self):
|
def test_server_error(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user