From 928935e5c0b8b43827fdf08b212d59d92b660924 Mon Sep 17 00:00:00 2001 From: Cyril Roelandt Date: Mon, 15 Jun 2020 20:58:52 +0200 Subject: Do not use the six library in the tests. Change-Id: Ic8a2a736a733e0151ca82f19bfde428dc04cf255 --- glanceclient/tests/unit/test_http.py | 16 ++++----- glanceclient/tests/unit/test_progressbar.py | 6 ++-- glanceclient/tests/unit/test_shell.py | 52 ++++++++++++----------------- glanceclient/tests/unit/test_ssl.py | 10 ++---- glanceclient/tests/unit/test_utils.py | 29 +++++++--------- glanceclient/tests/unit/v1/test_images.py | 14 +++----- glanceclient/tests/unit/v1/test_shell.py | 16 +++------ glanceclient/tests/unit/v2/test_shell_v2.py | 14 ++++---- glanceclient/tests/utils.py | 24 ++++++------- 9 files changed, 76 insertions(+), 105 deletions(-) diff --git a/glanceclient/tests/unit/test_http.py b/glanceclient/tests/unit/test_http.py index 0cf8f5b..689074b 100644 --- a/glanceclient/tests/unit/test_http.py +++ b/glanceclient/tests/unit/test_http.py @@ -19,13 +19,13 @@ from unittest import mock import uuid import fixtures +import io from keystoneauth1 import session from keystoneauth1 import token_endpoint from oslo_utils import encodeutils import requests from requests_mock.contrib import fixture -import six -from six.moves.urllib import parse +from urllib import parse from testscenarios import load_tests_apply_scenarios as load_tests # noqa import testtools from testtools import matchers @@ -296,14 +296,14 @@ class TestClient(testtools.TestCase): def test__chunk_body_exact_size_chunk(self): test_client = http._BaseHTTPClient() bytestring = b'x' * http.CHUNKSIZE - data = six.BytesIO(bytestring) + data = io.BytesIO(bytestring) chunk = list(test_client._chunk_body(data)) self.assertEqual(1, len(chunk)) self.assertEqual([bytestring], chunk) def test_http_chunked_request(self): text = "Ok" - data = six.StringIO(text) + data = io.StringIO(text) path = '/v1/images/' self.mock.post(self.endpoint + path, text=text) @@ -322,13 +322,13 @@ class TestClient(testtools.TestCase): resp, body = self.client.post(path, headers=headers, data=data) self.assertEqual(text, resp.text) - self.assertIsInstance(self.mock.last_request.body, six.string_types) + self.assertIsInstance(self.mock.last_request.body, str) self.assertEqual(data, json.loads(self.mock.last_request.body)) def test_http_chunked_response(self): data = "TEST" path = '/v1/images/' - self.mock.get(self.endpoint + path, body=six.StringIO(data), + self.mock.get(self.endpoint + path, body=io.StringIO(data), headers={"Content-Type": "application/octet-stream"}) resp, body = self.client.get(path) @@ -341,7 +341,7 @@ class TestClient(testtools.TestCase): response = 'Ok' headers = {"Content-Type": "text/plain", "test": "value1\xa5\xa6"} - fake = utils.FakeResponse(headers, six.StringIO(response)) + fake = utils.FakeResponse(headers, io.StringIO(response)) self.client.log_http_response(fake) except UnicodeDecodeError as e: self.fail("Unexpected UnicodeDecodeError exception '%s'" % e) @@ -444,7 +444,7 @@ class TestClient(testtools.TestCase): logger = self.useFixture(fixtures.FakeLogger(level=logging.DEBUG)) data = "TEST" path = '/v1/images/' - self.mock.get(self.endpoint + path, body=six.StringIO(data), + self.mock.get(self.endpoint + path, body=io.StringIO(data), headers={"Content-Type": "application/octet-stream", 'x-openstack-request-id': "1234"}) diff --git a/glanceclient/tests/unit/test_progressbar.py b/glanceclient/tests/unit/test_progressbar.py index 76f96fb..d0596d5 100644 --- a/glanceclient/tests/unit/test_progressbar.py +++ b/glanceclient/tests/unit/test_progressbar.py @@ -13,10 +13,10 @@ # License for the specific language governing permissions and limitations # under the License. +import io import sys import requests -import six import testtools from glanceclient.common import progressbar @@ -49,7 +49,7 @@ class TestProgressBarWrapper(testtools.TestCase): def test_iter_file_display_progress_bar(self): size = 98304 - file_obj = six.StringIO('X' * size) + file_obj = io.StringIO('X' * size) saved_stdout = sys.stdout try: sys.stdout = output = test_utils.FakeTTYStdout() @@ -67,7 +67,7 @@ class TestProgressBarWrapper(testtools.TestCase): def test_iter_file_no_tty(self): size = 98304 - file_obj = six.StringIO('X' * size) + file_obj = io.StringIO('X' * size) saved_stdout = sys.stdout try: sys.stdout = output = test_utils.FakeNoTTYStdout() diff --git a/glanceclient/tests/unit/test_shell.py b/glanceclient/tests/unit/test_shell.py index b23591f..4823224 100644 --- a/glanceclient/tests/unit/test_shell.py +++ b/glanceclient/tests/unit/test_shell.py @@ -17,6 +17,7 @@ import argparse from collections import OrderedDict import hashlib +import io import logging import os import sys @@ -28,7 +29,6 @@ import fixtures from keystoneauth1 import exceptions as ks_exc from keystoneauth1 import fixture as ks_fixture from requests_mock.contrib import fixture as rm_fixture -import six from glanceclient.common import utils from glanceclient import exc @@ -144,8 +144,8 @@ class ShellTest(testutils.TestCase): orig = sys.stdout orig_stderr = sys.stderr try: - sys.stdout = six.StringIO() - sys.stderr = six.StringIO() + sys.stdout = io.StringIO() + sys.stderr = io.StringIO() _shell = openstack_shell.OpenStackImagesShell() _shell.main(argstr.split()) except SystemExit: @@ -162,10 +162,7 @@ class ShellTest(testutils.TestCase): def test_fixup_subcommand(self): arglist = [u'image-list', u'--help'] - if six.PY2: - expected_arglist = [b'image-list', u'--help'] - elif six.PY3: - expected_arglist = [u'image-list', u'--help'] + expected_arglist = [u'image-list', u'--help'] openstack_shell.OpenStackImagesShell._fixup_subcommand( arglist, arglist @@ -175,14 +172,9 @@ class ShellTest(testutils.TestCase): def test_fixup_subcommand_with_options_preceding(self): arglist = [u'--os-auth-token', u'abcdef', u'image-list', u'--help'] unknown = arglist[2:] - if six.PY2: - expected_arglist = [ - u'--os-auth-token', u'abcdef', b'image-list', u'--help' - ] - elif six.PY3: - expected_arglist = [ - u'--os-auth-token', u'abcdef', u'image-list', u'--help' - ] + expected_arglist = [ + u'--os-auth-token', u'abcdef', u'image-list', u'--help' + ] openstack_shell.OpenStackImagesShell._fixup_subcommand( unknown, arglist @@ -194,8 +186,8 @@ class ShellTest(testutils.TestCase): argstr = '--os-image-api-version 2 help foofoo' self.assertRaises(exc.CommandError, shell.main, argstr.split()) - @mock.patch('sys.stdout', six.StringIO()) - @mock.patch('sys.stderr', six.StringIO()) + @mock.patch('sys.stdout', io.StringIO()) + @mock.patch('sys.stderr', io.StringIO()) @mock.patch('sys.argv', ['glance', 'help', 'foofoo']) def test_no_stacktrace_when_debug_disabled(self): with mock.patch.object(traceback, 'print_exc') as mock_print_exc: @@ -205,8 +197,8 @@ class ShellTest(testutils.TestCase): pass self.assertFalse(mock_print_exc.called) - @mock.patch('sys.stdout', six.StringIO()) - @mock.patch('sys.stderr', six.StringIO()) + @mock.patch('sys.stdout', io.StringIO()) + @mock.patch('sys.stderr', io.StringIO()) @mock.patch('sys.argv', ['glance', 'help', 'foofoo']) def test_stacktrace_when_debug_enabled_by_env(self): old_environment = os.environ.copy() @@ -221,8 +213,8 @@ class ShellTest(testutils.TestCase): finally: os.environ = old_environment - @mock.patch('sys.stdout', six.StringIO()) - @mock.patch('sys.stderr', six.StringIO()) + @mock.patch('sys.stdout', io.StringIO()) + @mock.patch('sys.stderr', io.StringIO()) @mock.patch('sys.argv', ['glance', '--debug', 'help', 'foofoo']) def test_stacktrace_when_debug_enabled(self): with mock.patch.object(traceback, 'print_exc') as mock_print_exc: @@ -589,8 +581,8 @@ class ShellTest(testutils.TestCase): self.assertRaises(exc.CommandError, glance_shell.main, args.split()) @mock.patch('sys.argv', ['glance']) - @mock.patch('sys.stdout', six.StringIO()) - @mock.patch('sys.stderr', six.StringIO()) + @mock.patch('sys.stdout', io.StringIO()) + @mock.patch('sys.stderr', io.StringIO()) def test_main_noargs(self): # Ensure that main works with no command-line arguments try: @@ -781,7 +773,7 @@ class ShellCacheSchemaTest(testutils.TestCase): return Args(args) - @mock.patch('six.moves.builtins.open', new=mock.mock_open(), create=True) + @mock.patch('builtins.open', new=mock.mock_open(), create=True) @mock.patch('os.path.exists', return_value=True) def test_cache_schemas_gets_when_forced(self, exists_mock): options = { @@ -804,7 +796,7 @@ class ShellCacheSchemaTest(testutils.TestCase): actual = json.loads(open.mock_calls[6][1][0]) self.assertEqual(schema_odict, actual) - @mock.patch('six.moves.builtins.open', new=mock.mock_open(), create=True) + @mock.patch('builtins.open', new=mock.mock_open(), create=True) @mock.patch('os.path.exists', side_effect=[True, False, False, False]) def test_cache_schemas_gets_when_not_exists(self, exists_mock): options = { @@ -827,7 +819,7 @@ class ShellCacheSchemaTest(testutils.TestCase): actual = json.loads(open.mock_calls[6][1][0]) self.assertEqual(schema_odict, actual) - @mock.patch('six.moves.builtins.open', new=mock.mock_open(), create=True) + @mock.patch('builtins.open', new=mock.mock_open(), create=True) @mock.patch('os.path.exists', return_value=True) def test_cache_schemas_leaves_when_present_not_forced(self, exists_mock): options = { @@ -848,7 +840,7 @@ class ShellCacheSchemaTest(testutils.TestCase): self.assertEqual(4, exists_mock.call_count) self.assertEqual(0, open.mock_calls.__len__()) - @mock.patch('six.moves.builtins.open', new=mock.mock_open(), create=True) + @mock.patch('builtins.open', new=mock.mock_open(), create=True) @mock.patch('os.path.exists', return_value=True) def test_cache_schemas_leaves_auto_switch(self, exists_mock): options = { @@ -899,7 +891,7 @@ class ShellTestRequests(testutils.TestCase): headers = {'Content-Length': '4', 'Content-type': 'application/octet-stream'} - fake = testutils.FakeResponse(headers, six.StringIO('DATA')) + fake = testutils.FakeResponse(headers, io.StringIO('DATA')) self.requests.get('http://example.com/v1/images/%s' % id, raw=fake) @@ -938,7 +930,7 @@ class ShellTestRequests(testutils.TestCase): headers = {'Content-Length': '4', 'Content-type': 'application/octet-stream'} - fake = testutils.FakeResponse(headers, six.StringIO('DATA')) + fake = testutils.FakeResponse(headers, io.StringIO('DATA')) self.requests.get('http://example.com/v1/images/%s' % id, headers=headers, raw=fake) @@ -960,7 +952,7 @@ class ShellTestRequests(testutils.TestCase): id = image_show_fixture['id'] headers = {'Content-Length': '4', 'Content-type': 'application/octet-stream'} - fake = testutils.FakeResponse(headers, six.StringIO('DATA')) + fake = testutils.FakeResponse(headers, io.StringIO('DATA')) self.requests = self.useFixture(rm_fixture.Fixture()) self.requests.get('http://example.com/v2/images/%s/file' % id, diff --git a/glanceclient/tests/unit/test_ssl.py b/glanceclient/tests/unit/test_ssl.py index 320dfde..f95e777 100644 --- a/glanceclient/tests/unit/test_ssl.py +++ b/glanceclient/tests/unit/test_ssl.py @@ -16,7 +16,6 @@ import os from unittest import mock -import six import ssl import testtools import threading @@ -26,10 +25,7 @@ from glanceclient import exc from glanceclient import v1 from glanceclient import v2 -if six.PY3 is True: - import socketserver -else: - import SocketServer as socketserver +import socketserver TEST_VAR_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), @@ -217,9 +213,7 @@ class TestHTTPSVerifyCert(testtools.TestCase): # starting from python 2.7.8 the way to handle loading private # keys into the SSL_CTX was changed and error message become # similar to the one in 3.X - if (six.PY2 and 'PrivateKey' not in e.message and - 'PEM lib' not in e.message or - six.PY3 and 'PEM lib' not in e.message): + if 'PEM lib' not in e.message: self.fail('No appropriate failure message is received') @mock.patch('sys.stderr') diff --git a/glanceclient/tests/unit/test_utils.py b/glanceclient/tests/unit/test_utils.py index 6128d6c..46cefbf 100644 --- a/glanceclient/tests/unit/test_utils.py +++ b/glanceclient/tests/unit/test_utils.py @@ -13,14 +13,13 @@ # License for the specific language governing permissions and limitations # under the License. +import io import sys from unittest import mock from oslo_utils import encodeutils from requests import Response -import six # NOTE(jokke): simplified transition to py3, behaves like py2 xrange -from six.moves import range import testtools from glanceclient.common import utils @@ -47,7 +46,7 @@ class TestUtils(testtools.TestCase): def test_get_new_file_size(self): size = 98304 - file_obj = six.StringIO('X' * size) + file_obj = io.StringIO('X' * size) try: self.assertEqual(size, utils.get_file_size(file_obj)) # Check that get_file_size didn't change original file position. @@ -57,7 +56,7 @@ class TestUtils(testtools.TestCase): def test_get_consumed_file_size(self): size, consumed = 98304, 304 - file_obj = six.StringIO('X' * size) + file_obj = io.StringIO('X' * size) file_obj.seek(consumed) try: self.assertEqual(size, utils.get_file_size(file_obj)) @@ -79,10 +78,10 @@ class TestUtils(testtools.TestCase): saved_stdout = sys.stdout try: - sys.stdout = output_list = six.StringIO() + sys.stdout = output_list = io.StringIO() utils.print_list(images, columns) - sys.stdout = output_dict = six.StringIO() + sys.stdout = output_dict = io.StringIO() utils.print_dict({'K': 'k', 'Key': 'veeeeeeeeeeeeeeeeeeeeeeee' 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' @@ -126,7 +125,7 @@ class TestUtils(testtools.TestCase): 'tags': [u'Name1', u'Tag_123', u'veeeery long']})] saved_stdout = sys.stdout try: - sys.stdout = output_list = six.StringIO() + sys.stdout = output_list = io.StringIO() utils.print_list(images, columns) finally: @@ -145,7 +144,7 @@ class TestUtils(testtools.TestCase): image = {'id': '42', 'virtual_size': 1337} saved_stdout = sys.stdout try: - sys.stdout = output_list = six.StringIO() + sys.stdout = output_list = io.StringIO() utils.print_image(image) finally: sys.stdout = saved_stdout @@ -164,7 +163,7 @@ class TestUtils(testtools.TestCase): image = {'id': '42', 'virtual_size': None} saved_stdout = sys.stdout try: - sys.stdout = output_list = six.StringIO() + sys.stdout = output_list = io.StringIO() utils.print_image(image) finally: sys.stdout = saved_stdout @@ -181,13 +180,9 @@ class TestUtils(testtools.TestCase): def test_unicode_key_value_to_string(self): src = {u'key': u'\u70fd\u7231\u5a77'} - expected = {'key': '\xe7\x83\xbd\xe7\x88\xb1\xe5\xa9\xb7'} - if six.PY2: - self.assertEqual(expected, utils.unicode_key_value_to_string(src)) - else: - # u'xxxx' in PY3 is str, we will not get extra 'u' from cli - # output in PY3 - self.assertEqual(src, utils.unicode_key_value_to_string(src)) + # u'xxxx' in PY3 is str, we will not get extra 'u' from cli + # output in PY3 + self.assertEqual(src, utils.unicode_key_value_to_string(src)) def test_schema_args_with_list_types(self): # NOTE(flaper87): Regression for bug @@ -240,7 +235,7 @@ class TestUtils(testtools.TestCase): for chunk in i: raise(IOError) - data = six.moves.StringIO('somestring') + data = io.StringIO('somestring') data.close = mock.Mock() i = utils.IterableWithLength(data, 10) self.assertRaises(IOError, _iterate, i) diff --git a/glanceclient/tests/unit/v1/test_images.py b/glanceclient/tests/unit/v1/test_images.py index 1f43b83..1af7412 100644 --- a/glanceclient/tests/unit/v1/test_images.py +++ b/glanceclient/tests/unit/v1/test_images.py @@ -14,11 +14,10 @@ # under the License. import errno +import io import json import testtools - -import six -from six.moves.urllib import parse +from urllib import parse from glanceclient.tests import utils from glanceclient.v1 import client @@ -634,7 +633,7 @@ class ImageManagerTest(testtools.TestCase): self.assertEqual({'a': 'b', 'c': 'd'}, image.properties) def test_create_with_data(self): - image_data = six.StringIO('XXX') + image_data = io.StringIO('XXX') self.mgr.create(data=image_data) expect_headers = {'x-image-meta-size': '3'} expect = [('POST', '/v1/images', expect_headers, image_data)] @@ -711,7 +710,7 @@ class ImageManagerTest(testtools.TestCase): self.assertEqual(10, image.min_disk) def test_update_with_data(self): - image_data = six.StringIO('XXX') + image_data = io.StringIO('XXX') self.mgr.update('1', data=image_data) expect_headers = {'x-image-meta-size': '3', 'x-glance-registry-purge-props': 'false'} @@ -744,10 +743,7 @@ class ImageManagerTest(testtools.TestCase): def test_image_meta_from_headers_encoding(self): value = u"ni\xf1o" - if six.PY2: - fields = {"x-image-meta-name": "ni\xc3\xb1o"} - else: - fields = {"x-image-meta-name": value} + fields = {"x-image-meta-name": value} headers = self.mgr._image_meta_from_headers(fields) self.assertEqual(value, headers["name"]) diff --git a/glanceclient/tests/unit/v1/test_shell.py b/glanceclient/tests/unit/v1/test_shell.py index 5476a2f..46c6f68 100644 --- a/glanceclient/tests/unit/v1/test_shell.py +++ b/glanceclient/tests/unit/v1/test_shell.py @@ -15,11 +15,11 @@ # under the License. import argparse +import io import json import os from unittest import mock -import six import subprocess import tempfile import testtools @@ -34,12 +34,6 @@ import glanceclient.v1.shell as v1shell from glanceclient.tests import utils -if six.PY3: - import io - file_type = io.IOBase -else: - file_type = file - fixtures = { '/v1/images/96d2c7e1-de4e-4612-8aa2-ba26610c804e': { 'PUT': ( @@ -351,7 +345,7 @@ class ShellInvalidEndpointandParameterTest(utils.TestCase): @mock.patch('sys.stderr') def test_image_create_missing_container_format_stdin_data(self, __): # Fake that get_data_file method returns data - self.mock_get_data_file.return_value = six.StringIO() + self.mock_get_data_file.return_value = io.StringIO() e = self.assertRaises(exc.CommandError, self.run_command, '--os-image-api-version 1 image-create' ' --disk-format qcow2') @@ -361,7 +355,7 @@ class ShellInvalidEndpointandParameterTest(utils.TestCase): @mock.patch('sys.stderr') def test_image_create_missing_disk_format_stdin_data(self, __): # Fake that get_data_file method returns data - self.mock_get_data_file.return_value = six.StringIO() + self.mock_get_data_file.return_value = io.StringIO() e = self.assertRaises(exc.CommandError, self.run_command, '--os-image-api-version 1 image-create' ' --container-format bare') @@ -574,7 +568,7 @@ class ShellStdinHandlingTests(testtools.TestCase): self._do_update('44d2c7e1-de4e-4612-8aa2-ba26610c444f') self.assertIn('data', self.collected_args[1]) - self.assertIsInstance(self.collected_args[1]['data'], file_type) + self.assertIsInstance(self.collected_args[1]['data'], io.IOBase) self.assertEqual(b'Some Data', self.collected_args[1]['data'].read()) @@ -599,7 +593,7 @@ class ShellStdinHandlingTests(testtools.TestCase): self._do_update('44d2c7e1-de4e-4612-8aa2-ba26610c444f') self.assertIn('data', self.collected_args[1]) - self.assertIsInstance(self.collected_args[1]['data'], file_type) + self.assertIsInstance(self.collected_args[1]['data'], io.IOBase) self.assertEqual(b'Some Data\n', self.collected_args[1]['data'].read()) diff --git a/glanceclient/tests/unit/v2/test_shell_v2.py b/glanceclient/tests/unit/v2/test_shell_v2.py index 9c19551..4cf4d25 100644 --- a/glanceclient/tests/unit/v2/test_shell_v2.py +++ b/glanceclient/tests/unit/v2/test_shell_v2.py @@ -15,11 +15,11 @@ # under the License. import argparse from copy import deepcopy +import io import json import os from unittest import mock -import six import sys import tempfile import testtools @@ -196,7 +196,7 @@ class ShellV2Test(testtools.TestCase): @mock.patch('sys.stderr') def test_image_create_missing_container_format_stdin_data(self, __): # Fake that get_data_file method returns data - self.mock_get_data_file.return_value = six.StringIO() + self.mock_get_data_file.return_value = io.StringIO() e = self.assertRaises(exc.CommandError, self._run_command, '--os-image-api-version 2 image-create' ' --disk-format qcow2') @@ -206,7 +206,7 @@ class ShellV2Test(testtools.TestCase): @mock.patch('sys.stderr') def test_image_create_missing_disk_format_stdin_data(self, __): # Fake that get_data_file method returns data - self.mock_get_data_file.return_value = six.StringIO() + self.mock_get_data_file.return_value = io.StringIO() e = self.assertRaises(exc.CommandError, self._run_command, '--os-image-api-version 2 image-create' ' --container-format bare') @@ -618,7 +618,7 @@ class ShellV2Test(testtools.TestCase): 'os_hash_value': None}) def test_do_image_create_with_multihash(self): - self.mock_get_data_file.return_value = six.StringIO() + self.mock_get_data_file.return_value = io.StringIO() try: with open(tempfile.mktemp(), 'w+') as f: f.write('Some data here') @@ -694,7 +694,7 @@ class ShellV2Test(testtools.TestCase): 'container_format': 'bare', 'os_hidden': True}) def test_do_image_create_with_file(self): - self.mock_get_data_file.return_value = six.StringIO() + self.mock_get_data_file.return_value = io.StringIO() try: file_name = None with open(tempfile.mktemp(), 'w+') as f: @@ -1412,7 +1412,7 @@ class ShellV2Test(testtools.TestCase): self, mock_stdin, mock_do_stage, mock_do_import): """Backward compat -> handle this like a glance-direct""" mock_stdin.isatty = lambda: False - self.mock_get_data_file.return_value = six.StringIO() + self.mock_get_data_file.return_value = io.StringIO() args = self._make_args(self.base_args) with mock.patch.object(self.gc.images, 'create') as mocked_create: with mock.patch.object(self.gc.images, 'get') as mocked_get: @@ -1447,7 +1447,7 @@ class ShellV2Test(testtools.TestCase): self, mock_stdin, mock_access, mock_do_stage, mock_do_import): """Backward compat -> handle this like a glance-direct""" mock_stdin.isatty = lambda: True - self.mock_get_data_file.return_value = six.StringIO() + self.mock_get_data_file.return_value = io.StringIO() mock_access.return_value = True my_args = self.base_args.copy() my_args['file'] = 'fake-image-file.browncow' diff --git a/glanceclient/tests/utils.py b/glanceclient/tests/utils.py index 3deddb1..730b928 100644 --- a/glanceclient/tests/utils.py +++ b/glanceclient/tests/utils.py @@ -14,10 +14,10 @@ # under the License. import copy +import io import json -import six -import six.moves.urllib.parse as urlparse import testtools +from urllib import parse from glanceclient.v2 import schemas @@ -38,11 +38,11 @@ class FakeAPI(object): fixture = self.fixtures[sort_url_by_query_keys(url)][method] data = fixture[1] - if isinstance(fixture[1], six.string_types): + if isinstance(fixture[1], str): try: data = json.loads(fixture[1]) except ValueError: - data = six.StringIO(fixture[1]) + data = io.StringIO(fixture[1]) return FakeResponse(fixture[0], fixture[1]), data @@ -141,7 +141,7 @@ class FakeResponse(object): @property def text(self): - if isinstance(self.content, six.binary_type): + if isinstance(self.content, bytes): return self.content.decode('utf-8') return self.content @@ -166,7 +166,7 @@ class TestCase(testtools.TestCase): 'verify': True} -class FakeTTYStdout(six.StringIO): +class FakeTTYStdout(io.StringIO): """A Fake stdout that try to emulate a TTY device as much as possible.""" def isatty(self): @@ -177,7 +177,7 @@ class FakeTTYStdout(six.StringIO): if data.startswith('\r'): self.seek(0) data = data[1:] - return six.StringIO.write(self, data) + return io.StringIO.write(self, data) class FakeNoTTYStdout(FakeTTYStdout): @@ -197,24 +197,24 @@ def sort_url_by_query_keys(url): :param url: url which will be ordered by query keys :returns url: url with ordered query keys """ - parsed = urlparse.urlparse(url) - queries = urlparse.parse_qsl(parsed.query, True) + parsed = parse.urlparse(url) + queries = parse.parse_qsl(parsed.query, True) sorted_query = sorted(queries, key=lambda x: x[0]) - encoded_sorted_query = urlparse.urlencode(sorted_query, True) + encoded_sorted_query = parse.urlencode(sorted_query, True) url_parts = (parsed.scheme, parsed.netloc, parsed.path, parsed.params, encoded_sorted_query, parsed.fragment) - return urlparse.urlunparse(url_parts) + return parse.urlunparse(url_parts) def build_call_record(method, url, headers, data): """Key the request body be ordered if it's a dict type.""" if isinstance(data, dict): data = sorted(data.items()) - if isinstance(data, six.string_types): + if isinstance(data, str): # NOTE(flwang): For image update, the data will be a 'list' which # contains operation dict, such as: [{"op": "remove", "path": "/a"}] try: -- cgit v1.2.1