Updated Branches: refs/heads/trunk 21ac363ba -> 08a79e4d1
Only send Content-Length: 0 even if "data" is None. Fixes LIBCLOUD-390. Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/08a79e4d Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/08a79e4d Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/08a79e4d Branch: refs/heads/trunk Commit: 08a79e4d17d694477194d2c957db0ea5f67e8648 Parents: 21ac363 Author: Tomaz Muraus <[email protected]> Authored: Wed Sep 4 10:58:44 2013 +0200 Committer: Tomaz Muraus <[email protected]> Committed: Wed Sep 4 11:07:31 2013 +0200 ---------------------------------------------------------------------- CHANGES | 2 +- libcloud/common/base.py | 12 ++++++------ libcloud/test/test_connection.py | 37 +++++++++++++---------------------- 3 files changed, 21 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/08a79e4d/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index a956f87..e7a2217 100644 --- a/CHANGES +++ b/CHANGES @@ -14,7 +14,7 @@ Changes with Apache Libcloud in development [Tomaz Muraus] - Fix a regression introduced in 0.13.0 and make sure to include - Content-Length 0 with PUT and POST requests. (LIBCLOUD-362) + Content-Length 0 with PUT and POST requests. (LIBCLOUD-362, LIBCLOUD-390) [Tomaz Muraus] *) Compute http://git-wip-us.apache.org/repos/asf/libcloud/blob/08a79e4d/libcloud/common/base.py ---------------------------------------------------------------------- diff --git a/libcloud/common/base.py b/libcloud/common/base.py index 529bdbe..101e66c 100644 --- a/libcloud/common/base.py +++ b/libcloud/common/base.py @@ -571,14 +571,14 @@ class Connection(object): else: headers.update({'Host': self.host}) - # Encode data if provided if data: + # Encode data if provided data = self.encode_data(data) - - # Only send Content-Length 0 with POST and PUT request - if data is not None: - if len(data) > 0 or (len(data) == 0 and method in ['POST', 'PUT']): - headers.update({'Content-Length': str(len(data))}) + headers.update({'Content-Length': str(len(data))}) + else: + # Only send Content-Length 0 with POST and PUT request + if method.upper() in ['POST', 'PUT']: + headers.update({'Content-Length': '0'}) params, headers = self.pre_connect_hook(params, headers) http://git-wip-us.apache.org/repos/asf/libcloud/blob/08a79e4d/libcloud/test/test_connection.py ---------------------------------------------------------------------- diff --git a/libcloud/test/test_connection.py b/libcloud/test/test_connection.py index 938e170..798f7ec 100644 --- a/libcloud/test/test_connection.py +++ b/libcloud/test/test_connection.py @@ -49,39 +49,30 @@ class ConnectionClassTestCase(unittest.TestCase): call_kwargs = con.connection.request.call_args[1] self.assertTrue('Content-Length' not in call_kwargs['headers']) - # 'a' as data, content length should be present (data is GET is not + # 'a' as data, content length should be present (data in GET is not # corect, but anyways) con.request('/test', method='GET', data='a') call_kwargs = con.connection.request.call_args[1] self.assertEqual(call_kwargs['headers']['Content-Length'], '1') ## POST, PUT method - # No data, no content length should be present - con.request('/test', method='POST', data=None) - call_kwargs = con.connection.request.call_args[1] - self.assertTrue('Content-Length' not in call_kwargs['headers']) - - con.request('/test', method='PUT', data=None) - call_kwargs = con.connection.request.call_args[1] - self.assertTrue('Content-Length' not in call_kwargs['headers']) + # No data, content length should be present + for method in ['POST', 'PUT', 'post', 'put']: + con.request('/test', method=method, data=None) + call_kwargs = con.connection.request.call_args[1] + self.assertEqual(call_kwargs['headers']['Content-Length'], '0') # '' as data, content length should be present - con.request('/test', method='POST', data='') - call_kwargs = con.connection.request.call_args[1] - self.assertEqual(call_kwargs['headers']['Content-Length'], '0') - - con.request('/test', method='PUT', data='') - call_kwargs = con.connection.request.call_args[1] - self.assertEqual(call_kwargs['headers']['Content-Length'], '0') + for method in ['POST', 'PUT', 'post', 'put']: + con.request('/test', method=method, data='') + call_kwargs = con.connection.request.call_args[1] + self.assertEqual(call_kwargs['headers']['Content-Length'], '0') # 'a' as data, content length should be present - con.request('/test', method='POST', data='a') - call_kwargs = con.connection.request.call_args[1] - self.assertEqual(call_kwargs['headers']['Content-Length'], '1') - - con.request('/test', method='PUT', data='a') - call_kwargs = con.connection.request.call_args[1] - self.assertEqual(call_kwargs['headers']['Content-Length'], '1') + for method in ['POST', 'PUT', 'post', 'put']: + con.request('/test', method=method, data='a') + call_kwargs = con.connection.request.call_args[1] + self.assertEqual(call_kwargs['headers']['Content-Length'], '1') if __name__ == '__main__':
