Remove six

Replace the following items with Python 3 style code.

- six.PY2
- six.text_type
- six.string_type
- six.binary_type
- six.iterkeys
- six.moves
- six.itervalues

Implements: blueprint six-removal

Change-Id: I6195ceeeed2ebe1586973eaeef7fa9f29698fec2
This commit is contained in:
xuanyandong 2020-09-29 16:47:34 +08:00 committed by xuanyandong
parent ebb12611ca
commit 44f22cf2a5
23 changed files with 49 additions and 84 deletions

View File

@ -21,12 +21,6 @@
:synopsis: Infrastructure-as-a-Service Cloud platform.
"""
import six
import gettext
if six.PY2:
gettext.install('ec2api', unicode=1)
else:
gettext.install('ec2api')
gettext.install('ec2api')

View File

@ -28,7 +28,6 @@ from oslo_log import log as logging
from oslo_serialization import jsonutils
from oslo_utils import timeutils
import requests
import six
import webob
import webob.dec
import webob.exc
@ -345,16 +344,16 @@ def ec2_error_ex(ex, req, unexpected=False):
if unexpected and status >= 500:
message = _('Unknown error occurred.')
elif getattr(ex, 'message', None):
message = six.text_type(ex.message)
message = str(ex.message)
elif ex.args and any(arg for arg in ex.args):
message = " ".join(map(six.text_type, ex.args))
message = " ".join(map(str, ex.args))
else:
message = six.text_type(ex)
message = str(ex)
if unexpected:
# Log filtered environment for unexpected errors.
env = req.environ.copy()
for k in list(env.keys()):
if not isinstance(env[k], six.string_types):
if not isinstance(env[k], str):
env.pop(k)
log_fun(_('Environment: %s') % jsonutils.dumps(env))
return faults.ec2_error_response(request_id, code, message, status=status)
@ -394,6 +393,6 @@ class Executor(wsgi.Application):
resp = webob.Response()
resp.status = 200
resp.headers['Content-Type'] = 'text/xml'
resp.body = six.binary_type(result)
resp.body = bytes(result)
return resp

View File

@ -19,7 +19,6 @@ APIRequest class
from lxml import etree
from oslo_config import cfg
from oslo_log import log as logging
import six
from ec2api.api import cloud
from ec2api.api import ec2utils
@ -67,7 +66,7 @@ class APIRequest(object):
if isinstance(args[key], dict):
if args[key] == {}:
continue
first_subkey = next(six.iterkeys(args[key]))
first_subkey = next(iter(args[key].keys()))
if first_subkey.isdigit():
s = args[key]
args[key] = [convert_dicts_to_lists(s[k])

View File

@ -23,8 +23,6 @@ import collections
from oslo_config import cfg
from oslo_log import log as logging
import six
import six.moves
from ec2api.api import address
from ec2api.api import availability_zone
@ -60,7 +58,7 @@ def module_and_param_types(module, *args, **kwargs):
def func_wrapped(*args, **kwargs):
impl_func = getattr(module, func.__name__)
context = args[1]
params = collections.OrderedDict(six.moves.zip(
params = collections.OrderedDict(zip(
func.__code__.co_varnames[2:], param_types))
param_num = 0
mandatory_params_num = (func.__code__.co_argcount - 2 -

View File

@ -18,15 +18,13 @@ import fnmatch
import inspect
import operator
from oslo_config import cfg
from oslo_log import log as logging
import six
from ec2api.api import ec2utils
from ec2api.api import validator
from ec2api.db import api as db_api
from ec2api import exception
from ec2api.i18n import _
from oslo_config import cfg
from oslo_log import log as logging
ec2_opts = [
@ -68,12 +66,8 @@ class OnCrashCleaner(object):
function(*args, **kwargs)
except Exception:
if inspect.ismethod(function):
if six.PY2:
cmodule = function.im_class.__module__
cname = function.im_class.__name__
else:
cmodule = function.__self__.__class__.__module__
cname = function.__self__.__class__.__name__
cmodule = function.__self__.__class__.__module__
cname = function.__self__.__class__.__name__
name = '%s.%s.%s' % (cmodule, cname, function.__name__)
elif inspect.isfunction(function):
name = '%s.%s' % (function.__module__, function.__name__)

View File

@ -21,7 +21,6 @@ from oslo_config import cfg
from oslo_log import log as logging
from oslo_serialization import jsonutils
from oslo_utils import timeutils
import six
from ec2api import clients
from ec2api.db import api as db_api
@ -103,7 +102,7 @@ def dict_from_dotted_str(items):
for key, value in items:
parts = key.split(".")
key = str(camelcase_to_underscore(parts[0]))
if isinstance(value, six.string_types):
if isinstance(value, str):
# NOTE(vish): Automatically convert strings back
# into their respective values
value = _try_convert(value)
@ -146,10 +145,10 @@ def _render_data(el, data):
el.text = str(data).lower()
elif isinstance(data, datetime.datetime):
el.text = _database_to_isoformat(data)
elif isinstance(data, six.binary_type):
elif isinstance(data, bytes):
el.text = data.decode("utf-8")
elif data is not None:
el.text = six.text_type(data)
el.text = str(data)
def _database_to_isoformat(datetimeobj):

View File

@ -33,7 +33,6 @@ from oslo_concurrency import processutils
from oslo_config import cfg
from oslo_log import log as logging
from oslo_serialization import jsonutils
import six
from ec2api.api import common
from ec2api.api import ec2utils
@ -42,6 +41,7 @@ from ec2api import clients
from ec2api.db import api as db_api
from ec2api import exception
from ec2api.i18n import _
import urllib.parse as parse
LOG = logging.getLogger(__name__)
@ -226,7 +226,7 @@ def register_image(context, name=None, image_location=None,
# Resolve the import type
metadata['image_location'] = image_location
parsed_url = six.moves.urllib.parse.urlparse(image_location)
parsed_url = parse.urlparse(image_location)
is_s3_import = (parsed_url.scheme == '') or (parsed_url.scheme == 's3')
is_url_import = not is_s3_import
@ -847,7 +847,7 @@ def _s3_create(context, metadata):
"""Gets a manifest from s3 and makes an image."""
# Parse the metadata into bucket and manifest path
parsed_url = six.moves.urllib.parse.urlparse(metadata['image_location'])
parsed_url = parse.urlparse(metadata['image_location'])
if parsed_url.hostname is not None:
# Handle s3://<BUCKET_NAME>/<KEY_PATH> case
bucket_name = parsed_url.hostname
@ -862,7 +862,7 @@ def _s3_create(context, metadata):
image_location = '/'.join([bucket_name, manifest_path])
key = s3_client.get_object(Bucket=bucket_name, Key=manifest_path)
body = key['Body']
if isinstance(body, six.string_types):
if isinstance(body, str):
manifest = body
else:
# TODO(andrey-mp): check big objects

View File

@ -23,7 +23,6 @@ from novaclient import exceptions as nova_exception
from oslo_config import cfg
from oslo_log import log as logging
from oslo_utils import timeutils
import six
from ec2api.api import common
from ec2api.api import ec2utils
@ -1047,7 +1046,7 @@ def _get_groups_name_to_id(context):
def _get_ip_info_for_instance(os_instance):
addresses = list(itertools.chain(*six.itervalues(os_instance.addresses)))
addresses = list(itertools.chain(*os_instance.addresses.values()))
fixed_ip = next((addr['addr'] for addr in addresses
if (addr['version'] == 4 and
addr['OS-EXT-IPS:type'] == 'fixed')), None)
@ -1688,7 +1687,7 @@ _NAME_TO_CODE = {
}
_CODE_TO_NAMES = {code: [item[0] for item in _NAME_TO_CODE.items()
if item[1] == code]
for code in set(six.itervalues(_NAME_TO_CODE))}
for code in set(_NAME_TO_CODE.values())}
def inst_state_name_to_code(name):

View File

@ -17,7 +17,6 @@ import copy
import netaddr
from novaclient import exceptions as nova_exception
import six
from ec2api.api import common
from ec2api.api import ec2utils
@ -596,7 +595,7 @@ def _get_active_route_destinations(context, route_table):
if (item['vpc_id'] == route_table['vpc_id'] and
(ec2utils.get_ec2_id_kind(item['id']) != 'vgw' or
item['id'] in vpn_connections))}
for vpn in six.itervalues(vpn_connections):
for vpn in vpn_connections.values():
if vpn['vpn_gateway_id'] in destinations:
destinations[vpn['vpn_gateway_id']]['vpn_connection'] = vpn
return destinations

View File

@ -16,7 +16,6 @@ import re
import netaddr
from oslo_log import log as logging
import six
from ec2api import exception
from ec2api.i18n import _
@ -26,7 +25,7 @@ LOG = logging.getLogger(__name__)
def validate_str(val, parameter_name, max_length=None):
if (isinstance(val, six.string_types) and
if (isinstance(val, str) and
(max_length is None or max_length and len(val) <= max_length)):
return True
raise exception.ValidationError(

View File

@ -19,7 +19,6 @@ from lxml import etree
import netaddr
from neutronclient.common import exceptions as neutron_exception
from oslo_log import log as logging
import six
from ec2api.api import common
from ec2api.api import ec2utils
@ -322,7 +321,7 @@ def _format_customer_config(vpn_connection, customer_gateways, os_ikepolicies,
def _stop_vpn_connection(neutron, vpn_connection):
connection_ids = vpn_connection['os_ipsec_site_connections']
for os_connection_id in six.itervalues(connection_ids):
for os_connection_id in connection_ids.values():
try:
neutron.delete_ipsec_site_connection(os_connection_id)
except neutron_exception.NotFound:

View File

@ -18,7 +18,6 @@ from oslo_config import cfg
from oslo_context import context
from oslo_log import log as logging
from oslo_utils import timeutils
import six
from ec2api import clients
from ec2api import exception
@ -71,7 +70,7 @@ class RequestContext(context.RequestContext):
self.project_id = project_id
self.remote_address = remote_address
timestamp = timeutils.utcnow()
if isinstance(timestamp, six.string_types):
if isinstance(timestamp, str):
timestamp = timeutils.parse_strtime(timestamp)
self.timestamp = timestamp

View File

@ -20,11 +20,8 @@ SHOULD include dedicated exception logging.
"""
import sys
from oslo_config import cfg
from oslo_log import log as logging
import six
from ec2api.i18n import _
@ -55,8 +52,7 @@ class EC2APIException(Exception):
if not message:
try:
message = self.msg_fmt % kwargs
except Exception:
exc_info = sys.exc_info()
except Exception as e:
# kwargs doesn't match a variable in the message
# log the issue and the kwargs
LOG.exception('Exception in string format operation for '
@ -65,11 +61,11 @@ class EC2APIException(Exception):
LOG.error('%s: %s' % (name, value))
if CONF.fatal_exception_format_errors:
six.reraise(*exc_info)
raise e
else:
# at least get the core message out if something happened
message = self.msg_fmt
elif not isinstance(message, six.string_types):
elif not isinstance(message, str):
LOG.error("Message '%(msg)s' for %(ex)s exception is not "
"a string",
{'msg': message, 'ex': self.__class__.__name__})

View File

@ -20,8 +20,7 @@ import httplib2
from oslo_cache import core as cache_core
from oslo_config import cfg
from oslo_log import log as logging
import six
import six.moves.urllib.parse as urlparse
import urllib.parse as urlparse
import webob
from ec2api import context as ec2_context
@ -118,7 +117,7 @@ class MetadataRequestHandler(wsgi.Application):
msg = _('An unknown error has occurred. '
'Please try your request again.')
return webob.exc.HTTPInternalServerError(
explanation=six.text_type(msg))
explanation=str(msg))
def _proxy_request(self, req, requester):
headers = self._build_proxy_request_headers(requester)
@ -167,7 +166,7 @@ class MetadataRequestHandler(wsgi.Application):
)
LOG.warning(msg)
return webob.exc.HTTPInternalServerError(
explanation=six.text_type(msg))
explanation=str(msg))
else:
raise Exception(_('Unexpected response code: %s') % resp.status)
@ -213,9 +212,9 @@ class MetadataRequestHandler(wsgi.Application):
msg = _('X-Instance-ID header is missing from request.')
elif project_id is None:
msg = _('X-Tenant-ID header is missing from request.')
elif not isinstance(os_instance_id, six.string_types):
elif not isinstance(os_instance_id, str):
msg = _('Multiple X-Instance-ID headers found within request.')
elif not isinstance(project_id, six.string_types):
elif not isinstance(project_id, str):
msg = _('Multiple X-Tenant-ID headers found within request.')
else:
msg = None
@ -277,7 +276,7 @@ class MetadataRequestHandler(wsgi.Application):
self.cache_region)
def _add_response_data(self, response, data):
if isinstance(data, six.text_type):
if isinstance(data, str):
response.text = data
else:
response.body = data

View File

@ -19,7 +19,6 @@ from novaclient import exceptions as nova_exception
from oslo_cache import core as cache_core
from oslo_config import cfg
from oslo_log import log as logging
import six
from ec2api.api import clients
from ec2api.api import ec2utils
@ -293,7 +292,7 @@ def _format_metadata_item(data):
elif isinstance(data, list):
return '\n'.join(data)
else:
return six.text_type(data)
return str(data)
def _find_path_in_tree(data, path_tokens):

View File

@ -40,8 +40,7 @@ from oslo_config import cfg
from oslo_log import log as logging
from oslo_utils import fileutils
import routes
import six
from six.moves.urllib import parse
from urllib import parse
import webob
from ec2api import paths
@ -176,7 +175,7 @@ class BaseRequestHandler(object):
self.set_status(404)
def finish(self, body=''):
if isinstance(body, six.binary_type):
if isinstance(body, bytes):
self.response.body = body
else:
self.response.body = body.encode("utf-8")
@ -187,11 +186,11 @@ class BaseRequestHandler(object):
def render_xml(self, value):
assert isinstance(value, dict) and len(value) == 1
self.set_header("Content-Type", "application/xml; charset=UTF-8")
name = next(six.iterkeys(value))
name = next(iter(value.keys()))
parts = []
parts.append('<' + name +
' xmlns="http://s3.amazonaws.com/doc/2006-03-01/">')
self._render_parts(next(six.itervalues(value)), parts)
self._render_parts(next(iter(value.values())), parts)
parts.append('</' + name + '>')
self.finish('<?xml version="1.0" encoding="UTF-8"?>\n' +
''.join(parts))
@ -200,9 +199,9 @@ class BaseRequestHandler(object):
if not parts:
parts = []
if isinstance(value, six.string_types):
if isinstance(value, str):
parts.append(utils.xhtml_escape(value))
elif isinstance(value, six.integer_types):
elif isinstance(value, int):
parts.append(str(value))
elif isinstance(value, datetime.datetime):
parts.append(value.strftime("%Y-%m-%dT%H:%M:%S.000Z"))

View File

@ -22,7 +22,7 @@
# See http://code.google.com/p/python-nose/issues/detail?id=373
# The code below enables nosetests to work with i18n _() blocks
from six.moves import builtins
import builtins
setattr(builtins, '_', lambda x: x)
# NOTE(ft): this is required by test_s3.S3APITestCase to switch execution

View File

@ -17,7 +17,6 @@ from unittest import mock
from oslo_context import context
from oslo_utils import timeutils
import six
from ec2api.api import apirequest
from ec2api.tests.unit import base
@ -100,7 +99,7 @@ class EC2RequesterTestCase(base.BaseTestCase):
def test_render_response_utf8(self):
req = apirequest.APIRequest("FakeAction", "FakeVersion", {})
resp = {
'utf8': six.unichr(40960) + u'abcd' + six.unichr(1972)
'utf8': chr(40960) + u'abcd' + chr(1972)
}
data = req._render_response(resp, 'uuid').decode()
self.assertIn('<utf8>&#40960;abcd&#1972;</utf8>', data)

View File

@ -15,7 +15,6 @@
import os
from unittest import mock
import six
import tempfile
from cinderclient import exceptions as cinder_exception
@ -970,7 +969,7 @@ class S3TestCase(base.BaseTestCase):
'-out', public_key,
'-subj', subject)
text = "some @#!%^* test text"
process_input = text.encode("ascii") if six.PY3 else text
process_input = text.encode("ascii")
enc, _err = processutils.execute('openssl',
'rsautl',
'-certin',
@ -982,6 +981,5 @@ class S3TestCase(base.BaseTestCase):
self.configure(x509_root_private_key=private_key)
dec = image_api._decrypt_text(enc)
self.assertIsInstance(dec, bytes)
if six.PY3:
dec = dec.decode('ascii')
dec = dec.decode('ascii')
self.assertEqual(text, dec)

View File

@ -20,7 +20,6 @@ import random
from unittest import mock
from novaclient import exceptions as nova_exception
import six
from ec2api.api import instance as instance_api
import ec2api.clients
@ -703,7 +702,8 @@ class InstanceTestCase(base.ApiTestCase):
utcnow.return_value = datetime.datetime(2015, 1, 19, 23, 34, 45, 123)
resp = self.execute(operation,
{'InstanceId': fakes.ID_EC2_INSTANCE_2})
expected_data = (base64.b64encode(six.b(getter.return_value))
expected_data = (base64.b64encode(getter.return_value.
encode("latin-1"))
.decode("utf-8"))
self.assertEqual({'instanceId': fakes.ID_EC2_INSTANCE_2,
'timestamp': '2015-01-19T23:34:45.000Z',

View File

@ -18,7 +18,6 @@ from unittest import mock
from oslo_config import cfg
from oslo_config import fixture as config_fixture
from oslotest import base as test_base
import six
import testtools
import webob
@ -366,7 +365,7 @@ class ProxyTestCase(test_base.BaseTestCase):
@mock.patch('ec2api.metadata.api.instance_api')
@mock.patch('ec2api.metadata.MetadataRequestHandler._validate_signature')
def test_get_metadata_items(self, validate, instance_api, db_api, nova):
FAKE_USER_DATA = u'fake_user_data-' + six.unichr(1071)
FAKE_USER_DATA = u'fake_user_data-' + chr(1071)
nova.return_value.servers.list.return_value = [
fakes.OSInstance(fakes.OS_INSTANCE_1)]
keypair = mock.Mock(public_key=fakes.PUBLIC_KEY_KEY_PAIR)

View File

@ -19,7 +19,6 @@ from unittest import mock
from novaclient import exceptions as nova_exception
from oslo_cache import core as cache_core
from oslo_config import cfg
import six
from ec2api import exception
from ec2api.metadata import api
@ -29,7 +28,7 @@ from ec2api.tests.unit import matchers
from ec2api.tests.unit import tools
CONF = cfg.CONF
FAKE_USER_DATA = u'fake_user_data-' + six.unichr(1071)
FAKE_USER_DATA = u'fake_user_data-' + chr(1071)
class MetadataApiTestCase(base.ApiTestCase):

View File

@ -32,7 +32,6 @@ python-neutronclient>=6.7.0 # Apache-2.0
python-novaclient>=10.1.0 # Apache-2.0
python-openstackclient>=3.14.0 # Apache-2.0
Routes>=2.4.1 # MIT
six>=1.11.0 # MIT
SQLAlchemy>=1.2.5 # MIT
sqlalchemy-migrate>=0.11.0 # Apache-2.0
WebOb>=1.7.4 # MIT