Merge "Stop mutating header dicts"
This commit is contained in:
		| @@ -304,7 +304,7 @@ class _RetryBody(_ObjectBody): | ||||
|         self.obj = obj | ||||
|         self.query_string = query_string | ||||
|         self.response_dict = response_dict | ||||
|         self.headers = headers if headers is not None else {} | ||||
|         self.headers = dict(headers) if headers is not None else {} | ||||
|         self.bytes_read = 0 | ||||
|  | ||||
|     def read(self, length=None): | ||||
| @@ -854,13 +854,15 @@ def post_account(url, token, headers, http_conn=None, response_dict=None, | ||||
|     path = parsed.path | ||||
|     if query_string: | ||||
|         path += '?' + query_string | ||||
|     headers['X-Auth-Token'] = token | ||||
|     req_headers = {'X-Auth-Token': token} | ||||
|     if service_token: | ||||
|         headers['X-Service-Token'] = service_token | ||||
|     conn.request(method, path, data, headers) | ||||
|         req_headers['X-Service-Token'] = service_token | ||||
|     if headers: | ||||
|         req_headers.update(headers) | ||||
|     conn.request(method, path, data, req_headers) | ||||
|     resp = conn.getresponse() | ||||
|     body = resp.read() | ||||
|     http_log((url, method,), {'headers': headers}, resp, body) | ||||
|     http_log((url, method,), {'headers': req_headers}, resp, body) | ||||
|  | ||||
|     store_response(resp, response_dict) | ||||
|  | ||||
| @@ -902,12 +904,6 @@ def get_container(url, token, container, marker=None, limit=None, | ||||
|     """ | ||||
|     if not http_conn: | ||||
|         http_conn = http_connection(url) | ||||
|     if headers: | ||||
|         headers = dict(headers) | ||||
|     else: | ||||
|         headers = {} | ||||
|     headers['X-Auth-Token'] = token | ||||
|     headers['Accept-Encoding'] = 'gzip' | ||||
|     if full_listing: | ||||
|         rv = get_container(url, token, container, marker, limit, prefix, | ||||
|                            delimiter, end_marker, path, http_conn, | ||||
| @@ -942,17 +938,20 @@ def get_container(url, token, container, marker=None, limit=None, | ||||
|         qs += '&path=%s' % quote(path) | ||||
|     if query_string: | ||||
|         qs += '&%s' % query_string.lstrip('?') | ||||
|     req_headers = {'X-Auth-Token': token, 'Accept-Encoding': 'gzip'} | ||||
|     if service_token: | ||||
|         headers['X-Service-Token'] = service_token | ||||
|         req_headers['X-Service-Token'] = service_token | ||||
|     if headers: | ||||
|         req_headers.update(headers) | ||||
|     method = 'GET' | ||||
|     conn.request(method, '%s?%s' % (cont_path, qs), '', headers) | ||||
|     conn.request(method, '%s?%s' % (cont_path, qs), '', req_headers) | ||||
|     resp = conn.getresponse() | ||||
|     body = resp.read() | ||||
|     http_log(('%(url)s%(cont_path)s?%(qs)s' % | ||||
|               {'url': url.replace(parsed.path, ''), | ||||
|                'cont_path': cont_path, | ||||
|                'qs': qs}, method,), | ||||
|              {'headers': headers}, resp, body) | ||||
|              {'headers': req_headers}, resp, body) | ||||
|  | ||||
|     if resp.status < 200 or resp.status >= 300: | ||||
|         raise ClientException.from_response(resp, 'Container GET failed', body) | ||||
| @@ -1025,23 +1024,23 @@ def put_container(url, token, container, headers=None, http_conn=None, | ||||
|         parsed, conn = http_connection(url) | ||||
|     path = '%s/%s' % (parsed.path, quote(container)) | ||||
|     method = 'PUT' | ||||
|     if not headers: | ||||
|         headers = {} | ||||
|     headers['X-Auth-Token'] = token | ||||
|     req_headers = {'X-Auth-Token': token} | ||||
|     if service_token: | ||||
|         headers['X-Service-Token'] = service_token | ||||
|     if 'content-length' not in (k.lower() for k in headers): | ||||
|         headers['Content-Length'] = '0' | ||||
|         req_headers['X-Service-Token'] = service_token | ||||
|     if headers: | ||||
|         req_headers.update(headers) | ||||
|     if 'content-length' not in (k.lower() for k in req_headers): | ||||
|         req_headers['Content-Length'] = '0' | ||||
|     if query_string: | ||||
|         path += '?' + query_string.lstrip('?') | ||||
|     conn.request(method, path, '', headers) | ||||
|     conn.request(method, path, '', req_headers) | ||||
|     resp = conn.getresponse() | ||||
|     body = resp.read() | ||||
|  | ||||
|     store_response(resp, response_dict) | ||||
|  | ||||
|     http_log(('%s%s' % (url.replace(parsed.path, ''), path), method,), | ||||
|              {'headers': headers}, resp, body) | ||||
|              {'headers': req_headers}, resp, body) | ||||
|     if resp.status < 200 or resp.status >= 300: | ||||
|         raise ClientException.from_response(resp, 'Container PUT failed', body) | ||||
|  | ||||
| @@ -1068,16 +1067,18 @@ def post_container(url, token, container, headers, http_conn=None, | ||||
|         parsed, conn = http_connection(url) | ||||
|     path = '%s/%s' % (parsed.path, quote(container)) | ||||
|     method = 'POST' | ||||
|     headers['X-Auth-Token'] = token | ||||
|     req_headers = {'X-Auth-Token': token} | ||||
|     if service_token: | ||||
|         headers['X-Service-Token'] = service_token | ||||
|         req_headers['X-Service-Token'] = service_token | ||||
|     if headers: | ||||
|         req_headers.update(headers) | ||||
|     if 'content-length' not in (k.lower() for k in headers): | ||||
|         headers['Content-Length'] = '0' | ||||
|     conn.request(method, path, '', headers) | ||||
|         req_headers['Content-Length'] = '0' | ||||
|     conn.request(method, path, '', req_headers) | ||||
|     resp = conn.getresponse() | ||||
|     body = resp.read() | ||||
|     http_log(('%s%s' % (url.replace(parsed.path, ''), path), method,), | ||||
|              {'headers': headers}, resp, body) | ||||
|              {'headers': req_headers}, resp, body) | ||||
|  | ||||
|     store_response(resp, response_dict) | ||||
|  | ||||
| @@ -1374,14 +1375,16 @@ def post_object(url, token, container, name, headers, http_conn=None, | ||||
|     else: | ||||
|         parsed, conn = http_connection(url) | ||||
|     path = '%s/%s/%s' % (parsed.path, quote(container), quote(name)) | ||||
|     headers['X-Auth-Token'] = token | ||||
|     req_headers = {'X-Auth-Token': token} | ||||
|     if service_token: | ||||
|         headers['X-Service-Token'] = service_token | ||||
|     conn.request('POST', path, '', headers) | ||||
|         req_headers['X-Service-Token'] = service_token | ||||
|     if headers: | ||||
|         req_headers.update(headers) | ||||
|     conn.request('POST', path, '', req_headers) | ||||
|     resp = conn.getresponse() | ||||
|     body = resp.read() | ||||
|     http_log(('%s%s' % (url.replace(parsed.path, ''), path), 'POST',), | ||||
|              {'headers': headers}, resp, body) | ||||
|              {'headers': req_headers}, resp, body) | ||||
|  | ||||
|     store_response(resp, response_dict) | ||||
|  | ||||
|   | ||||
| @@ -749,9 +749,10 @@ class TestPostAccount(MockHttpTest): | ||||
|         c.http_connection = self.fake_http_connection(200, headers={ | ||||
|             'X-Account-Meta-Color': 'blue', | ||||
|         }, body='foo') | ||||
|         headers = {'x-account-meta-shape': 'square'} | ||||
|         resp_headers, body = c.post_account( | ||||
|             'http://www.tests.com/path/to/account', 'asdf', | ||||
|             {'x-account-meta-shape': 'square'}, query_string='bar=baz', | ||||
|             headers, query_string='bar=baz', | ||||
|             data='some data') | ||||
|         self.assertEqual('blue', resp_headers.get('x-account-meta-color')) | ||||
|         self.assertEqual('foo', body) | ||||
| @@ -760,6 +761,8 @@ class TestPostAccount(MockHttpTest): | ||||
|              'some data', {'x-auth-token': 'asdf', | ||||
|                            'x-account-meta-shape': 'square'}) | ||||
|         ]) | ||||
|         # Check that we didn't mutate the request ehader dict | ||||
|         self.assertEqual(headers, {'x-account-meta-shape': 'square'}) | ||||
|  | ||||
|     def test_server_error(self): | ||||
|         body = 'c' * 65 | ||||
| @@ -1513,6 +1516,11 @@ class TestPostObject(MockHttpTest): | ||||
|                 'X-Object-Meta-Test': 'mymeta', | ||||
|                 'X-Delete-At': delete_at}), | ||||
|         ]) | ||||
|         # Check that the request header dict didn't get mutated | ||||
|         self.assertEqual(args[-1], { | ||||
|             'X-Object-Meta-Test': 'mymeta', | ||||
|             'X-Delete-At': delete_at, | ||||
|         }) | ||||
|  | ||||
|     def test_unicode_ok(self): | ||||
|         conn = c.http_connection(u'http://www.test.com/') | ||||
| @@ -3141,10 +3149,11 @@ class TestServiceToken(MockHttpTest): | ||||
|         self.assertEqual(conn.attempts, 1) | ||||
|  | ||||
|     def test_service_token_post_container(self): | ||||
|         headers = {'X-Container-Meta-Color': 'blue'} | ||||
|         with mock.patch('swiftclient.client.http_connection', | ||||
|                         self.fake_http_connection(201)): | ||||
|             conn = self.get_connection() | ||||
|             conn.post_container('container1', {}) | ||||
|             conn.post_container('container1', headers) | ||||
|         self.assertEqual(1, len(self.request_log), self.request_log) | ||||
|         for actual in self.iter_request_log(): | ||||
|             self.assertEqual('POST', actual['method']) | ||||
| @@ -3154,6 +3163,8 @@ class TestServiceToken(MockHttpTest): | ||||
|             self.assertEqual('http://storage_url.com/container1', | ||||
|                              actual['full_path']) | ||||
|         self.assertEqual(conn.attempts, 1) | ||||
|         # Check that we didn't mutate the request header dict | ||||
|         self.assertEqual(headers, {'X-Container-Meta-Color': 'blue'}) | ||||
|  | ||||
|     def test_service_token_put_container(self): | ||||
|         with mock.patch('swiftclient.client.http_connection', | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zuul
					Zuul