From 01fb13c61297dd914daa3510966ace9795d91073 Mon Sep 17 00:00:00 2001 From: Clint Byrum Date: Mon, 14 Oct 2013 11:03:06 -0700 Subject: [PATCH] Fix all python3 test failures There are still problems with keystoneclient but this corrects all of the tuskarclient issues. Change-Id: I7ea8ba4bab9dd6efe27370b18b6c85d2ed717833 Fixes-bug: #1213882 --- requirements.txt | 1 + tuskarclient/common/formatting.py | 10 +++++----- tuskarclient/common/http.py | 16 +++++++++------- tuskarclient/tests/common/test_formatting.py | 8 ++++---- tuskarclient/tests/test_http.py | 8 ++++---- tuskarclient/tests/utils.py | 6 ++++-- 6 files changed, 27 insertions(+), 22 deletions(-) diff --git a/requirements.txt b/requirements.txt index 9865394..7e68445 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,4 @@ prettytable>=0.6,<0.8 python-keystoneclient>=0.2,<0.4 requests>=0.8 simplejson +six>=1.4.1 diff --git a/tuskarclient/common/formatting.py b/tuskarclient/common/formatting.py index eab1a73..a457c93 100644 --- a/tuskarclient/common/formatting.py +++ b/tuskarclient/common/formatting.py @@ -53,7 +53,7 @@ def print_list(objs, fields, formatters={}, custom_labels={}, sortby=0): else: row.append(getattr(o, field, '')) pt.add_row(row) - print pt.get_string(sortby=field_labels[sortby]) + print(pt.get_string(sortby=field_labels[sortby])) def print_dict(d, formatters={}, custom_labels={}): @@ -77,7 +77,7 @@ def print_dict(d, formatters={}, custom_labels={}): pt.add_row([label, formatters[field](d[field])]) else: pt.add_row([label, d[field]]) - print pt.get_string(sortby='Property') + print(pt.get_string(sortby='Property')) def attr_proxy(attr, formatter=lambda a: a, allow_undefined=True): @@ -109,7 +109,7 @@ def capacities_formatter(capacities): containing 'name', 'value' and 'unit' keys. ''' sorted_capacities = sorted(capacities, - lambda c1, c2: cmp(c1['name'], c2['name'])) + key=lambda c: c['name']) return '\n'.join(['{0}: {1} {2}'.format(c['name'], c['value'], c['unit']) for c in sorted_capacities]) @@ -118,7 +118,7 @@ def links_formatter(links): '''Formats a list of links. Link is a dict that has 'href' and 'rel' keys. ''' - sorted_links = sorted(links, lambda l1, l2: cmp(l1['rel'], l2['rel'])) + sorted_links = sorted(links, key=lambda l: l['rel']) return '\n'.join(['{0}: {1}'.format(l['rel'], l['href']) for l in sorted_links]) @@ -131,7 +131,7 @@ def resource_links_formatter(links): one. (We cannot fetch by 'rel', values in 'rel' are not used consistently.) ''' - sorted_links = sorted(links, lambda l1, l2: cmp(l1['id'], l2['id'])) + sorted_links = sorted(links, key=lambda l: l['id']) return '\n'.join(['{0}: {1}'.format(l['id'], l['links'][0]['href']) for l in sorted_links]) diff --git a/tuskarclient/common/http.py b/tuskarclient/common/http.py index ffed542..28a52ba 100644 --- a/tuskarclient/common/http.py +++ b/tuskarclient/common/http.py @@ -14,12 +14,13 @@ # under the License. import copy -import httplib import logging import os import socket -import StringIO -import urlparse + +from six.moves import http_client as httplib +from six.moves.urllib import parse as urlparse +from six import StringIO try: import ssl @@ -127,8 +128,8 @@ class HTTPClient(object): def _http_request(self, url, method, **kwargs): """Send an http request with the specified characteristics. - Wrapper around httplib.HTTP(S)Connection.request to handle tasks such - as setting headers and error handling. + Wrapper around http_client.HTTP(S)Connection.request to handle tasks + such as setting headers and error handling. """ # Copy the kwargs so we can reuse the original in case of redirects kwargs['headers'] = copy.deepcopy(kwargs.get('headers', {})) @@ -205,7 +206,7 @@ class HTTPClient(object): class VerifiedHTTPSConnection(httplib.HTTPSConnection): - """httplib-compatibile connection using client-side SSL authentication + """http_client-compatibile connection using client-side SSL authentication :see http://code.activestate.com/recipes/ 577548-https-httplib-client-connection-with-certificate-v/ @@ -213,7 +214,8 @@ class VerifiedHTTPSConnection(httplib.HTTPSConnection): def __init__(self, host, port, key_file=None, cert_file=None, ca_file=None, timeout=None, insecure=False): - httplib.HTTPSConnection.__init__(self, host, port, key_file=key_file, + httplib.HTTPSConnection.__init__(self, host, port, + key_file=key_file, cert_file=cert_file) self.key_file = key_file self.cert_file = cert_file diff --git a/tuskarclient/tests/common/test_formatting.py b/tuskarclient/tests/common/test_formatting.py index 38c369a..b5af3b9 100644 --- a/tuskarclient/tests/common/test_formatting.py +++ b/tuskarclient/tests/common/test_formatting.py @@ -10,8 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. -import cStringIO import mock +from six import StringIO import tuskarclient.common.formatting as fmt import tuskarclient.tests.utils as tutils @@ -19,7 +19,7 @@ import tuskarclient.tests.utils as tutils class PrintTest(tutils.TestCase): - @mock.patch('sys.stdout', new_callable=cStringIO.StringIO) + @mock.patch('sys.stdout', new_callable=StringIO) def test_print_dict(self, mock_out): dict_ = {'k': 'v', 'key': 'value'} formatters = {'key': lambda v: 'custom ' + v} @@ -36,7 +36,7 @@ class PrintTest(tutils.TestCase): mock_out.getvalue() ) - @mock.patch('sys.stdout', new_callable=cStringIO.StringIO) + @mock.patch('sys.stdout', new_callable=StringIO) def test_print_list(self, mock_out): fields = ['thing', 'color', '!artistic_name'] formatters = { @@ -57,7 +57,7 @@ class PrintTest(tutils.TestCase): mock_out.getvalue() ) - @mock.patch('sys.stdout', new_callable=cStringIO.StringIO) + @mock.patch('sys.stdout', new_callable=StringIO) def test_print_list_custom_field_without_formatter(self, mock_out): fields = ['!artistic_name'] diff --git a/tuskarclient/tests/test_http.py b/tuskarclient/tests/test_http.py index 29ae478..8bdbe1b 100644 --- a/tuskarclient/tests/test_http.py +++ b/tuskarclient/tests/test_http.py @@ -27,25 +27,25 @@ class HttpClientUrlGenerationTest(tutils.TestCase): def test_url_generation_trailing_slash_in_base(self): client = http.HTTPClient('http://localhost/') url = client._make_connection_url('/v1/resources') - print client.connection_params + print(client.connection_params) self.assertEqual(url, '/v1/resources') def test_url_generation_without_trailing_slash_in_base(self): client = http.HTTPClient('http://localhost') url = client._make_connection_url('/v1/resources') - print client.connection_params + print(client.connection_params) self.assertEqual(url, '/v1/resources') def test_url_generation_prefix_slash_in_path(self): client = http.HTTPClient('http://localhost/') url = client._make_connection_url('/v1/resources') - print client.connection_params + print(client.connection_params) self.assertEqual(url, '/v1/resources') def test_url_generation_without_prefix_slash_in_path(self): client = http.HTTPClient('http://localhost') url = client._make_connection_url('v1/resources') - print client.connection_params + print(client.connection_params) self.assertEqual(url, '/v1/resources') diff --git a/tuskarclient/tests/utils.py b/tuskarclient/tests/utils.py index 1e88c9d..a66d728 100644 --- a/tuskarclient/tests/utils.py +++ b/tuskarclient/tests/utils.py @@ -13,7 +13,8 @@ import copy import fixtures import os -import StringIO + +from six import StringIO import testtools from tuskarclient.common import http @@ -45,7 +46,8 @@ class FakeAPI(object): def raw_request(self, *args, **kwargs): fixture = self._request(*args, **kwargs) - body_iter = http.ResponseBodyIterator(StringIO.StringIO(fixture[1])) + body_iter = http.ResponseBodyIterator( + StringIO.StringIO(fixture[1])) return FakeResponse(fixture[0]), body_iter def json_request(self, *args, **kwargs):