Remove six and python 2.7 full support

Six is in use to help us to keep support for python 2.7.
Since the ussuri cycle we decide to remove the python 2.7
support so we can go ahead and also remove six usage from
the python code.

Review process and help
-----------------------
Removing six introduce a lot of changes and an huge amount of modified files
To simplify reviews we decided to split changes into several patches to avoid
painful reviews and avoid mistakes.

To review this patch you can use the six documentation [1] to obtain help and
understand choices.

Additional informations
-----------------------
Changes related to 'six.b(data)' [2]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

six.b [2] encode the given datas in latin-1 in python3 so I did the same
things in this patch.

Latin-1 is equal to iso-8859-1 [3].

This encoding is the default encoding [4] of certain descriptive HTTP
headers.

I suggest to keep latin-1 for the moment and to move to another encoding
in a follow-up patch if needed to move to most powerful encoding (utf8).

HTML4 support utf8 charset and utf8 is the default charset for HTML5 [5].

Note that this commit message is autogenerated and not necesserly contains
changes related to 'six.b'

[1] https://six.readthedocs.io/
[2] https://six.readthedocs.io/#six.b
[3] https://docs.python.org/3/library/codecs.html#standard-encodings
[4] https://www.w3schools.com/charsets/ref_html_8859.asp
[5] https://www.w3schools.com/html/html_charset.asp

Patch 28 of a serie of 28 patches
six fully removed now!
Thank you six for the rendered services!

Change-Id: If44ee4b565cc9390fa0422fba4dda080b4f90b98
This commit is contained in:
Hervé Beraud 2019-11-20 19:37:27 +01:00
parent 062ce29a3b
commit 8c96a4d856
8 changed files with 29 additions and 36 deletions

View File

@ -13,7 +13,6 @@
import mock
from oslo_messaging.rpc import dispatcher
import six
import webob
from heat.common import exception
@ -1309,7 +1308,7 @@ class ValidateTest(common.HeatTestCase):
res = dict(self.engine.validate_template(self.ctx, t, {}))
self.assertEqual({'Error': 'Resources must contain Resource. '
'Found a [%s] instead' % six.text_type},
'Found a [%s] instead' % str},
res)
def test_invalid_section_cfn(self):
@ -1621,7 +1620,7 @@ class ValidateTest(common.HeatTestCase):
'parameter_groups.Database '
'Group: The InstanceType parameter must be '
'assigned to one parameter group only.'),
six.text_type(exc))
str(exc))
def test_validate_duplicate_parameters_no_label(self):
t = template_format.parse(test_template_parameters_duplicate_no_label)
@ -1634,7 +1633,7 @@ class ValidateTest(common.HeatTestCase):
'parameter_groups.: '
'The key_name parameter must be '
'assigned to one parameter group only.'),
six.text_type(exc))
str(exc))
def test_validate_invalid_parameter_in_group(self):
t = template_format.parse(test_template_invalid_parameter_name)
@ -1652,7 +1651,7 @@ class ValidateTest(common.HeatTestCase):
'parameter_groups.Database Group: The grouped '
'parameter SomethingNotHere does not '
'reference a valid parameter.'),
six.text_type(exc))
str(exc))
def test_validate_invalid_parameter_no_label(self):
t = template_format.parse(test_template_invalid_parameter_no_label)
@ -1666,7 +1665,7 @@ class ValidateTest(common.HeatTestCase):
'parameter_groups.: The grouped '
'parameter key_name does not '
'reference a valid parameter.'),
six.text_type(exc))
str(exc))
def test_validate_no_parameters_in_group(self):
t = template_format.parse(test_template_no_parameters)
@ -1677,7 +1676,7 @@ class ValidateTest(common.HeatTestCase):
self.assertEqual(_('Parameter Groups error: parameter_groups.Server '
'Group: The parameters must be provided for each '
'parameter group.'), six.text_type(exc))
'parameter group.'), str(exc))
def test_validate_parameter_groups_not_list(self):
t = template_format.parse(test_template_parameter_groups_not_list)
@ -1688,7 +1687,7 @@ class ValidateTest(common.HeatTestCase):
self.assertEqual(_('Parameter Groups error: parameter_groups: '
'The parameter_groups should be '
'a list.'), six.text_type(exc))
'a list.'), str(exc))
def test_validate_parameters_not_list(self):
t = template_format.parse(test_template_parameters_not_list)
@ -1700,7 +1699,7 @@ class ValidateTest(common.HeatTestCase):
self.assertEqual(_('Parameter Groups error: '
'parameter_groups.Server Group: '
'The parameters of parameter group should be '
'a list.'), six.text_type(exc))
'a list.'), str(exc))
def test_validate_parameters_error_no_label(self):
t = template_format.parse(test_template_parameters_error_no_label)
@ -1711,7 +1710,7 @@ class ValidateTest(common.HeatTestCase):
self.assertEqual(_('Parameter Groups error: parameter_groups.: '
'The parameters of parameter group should be '
'a list.'), six.text_type(exc))
'a list.'), str(exc))
def test_validate_allowed_values_integer(self):
t = template_format.parse(test_template_allowed_integers)
@ -1750,7 +1749,7 @@ class ValidateTest(common.HeatTestCase):
err = self.assertRaises(exception.StackValidationFailed,
stack.validate)
self.assertIn('"3" is not an allowed value [1, 4, 8]',
six.text_type(err))
str(err))
# test with size parameter provided as number
template.env = environment.Environment({'size': 3})
@ -1758,7 +1757,7 @@ class ValidateTest(common.HeatTestCase):
err = self.assertRaises(exception.StackValidationFailed,
stack.validate)
self.assertIn('3 is not an allowed value [1, 4, 8]',
six.text_type(err))
str(err))
def test_validate_not_allowed_values_integer_str(self):
t = template_format.parse(test_template_allowed_integers_str)
@ -1770,7 +1769,7 @@ class ValidateTest(common.HeatTestCase):
err = self.assertRaises(exception.StackValidationFailed,
stack.validate)
self.assertIn('"3" is not an allowed value ["1", "4", "8"]',
six.text_type(err))
str(err))
# test with size parameter provided as number
template.env = environment.Environment({'size': 3})
@ -1778,7 +1777,7 @@ class ValidateTest(common.HeatTestCase):
err = self.assertRaises(exception.StackValidationFailed,
stack.validate)
self.assertIn('3 is not an allowed value ["1", "4", "8"]',
six.text_type(err))
str(err))
def test_validate_invalid_outputs(self):
t = template_format.parse(test_template_invalid_outputs)
@ -1789,7 +1788,7 @@ class ValidateTest(common.HeatTestCase):
error_message = ('outputs.string.value.get_attr: Arguments to '
'"get_attr" must be of the form '
'[resource_name, attribute, (path), ...]')
self.assertEqual(error_message, six.text_type(err))
self.assertEqual(error_message, str(err))
def test_validate_resource_attr_invalid_type(self):
t = template_format.parse("""
@ -1802,7 +1801,7 @@ class ValidateTest(common.HeatTestCase):
stack = parser.Stack(self.ctx, 'test_stack', template)
ex = self.assertRaises(exception.StackValidationFailed, stack.validate)
self.assertEqual('Resource resource type type must be string',
six.text_type(ex))
str(ex))
def test_validate_resource_attr_invalid_type_cfn(self):
t = template_format.parse("""
@ -1814,7 +1813,7 @@ class ValidateTest(common.HeatTestCase):
stack = parser.Stack(self.ctx, 'test_stack', tmpl.Template(t))
ex = self.assertRaises(exception.StackValidationFailed, stack.validate)
self.assertEqual('Resource Resource Type type must be string',
six.text_type(ex))
str(ex))
def test_validate_resource_invalid_key(self):
t = template_format.parse("""
@ -1827,7 +1826,7 @@ class ValidateTest(common.HeatTestCase):
template = tmpl.Template(t)
stack = parser.Stack(self.ctx, 'test_stack', template)
ex = self.assertRaises(exception.StackValidationFailed, stack.validate)
self.assertIn('wibble', six.text_type(ex))
self.assertIn('wibble', str(ex))
def test_validate_resource_invalid_cfn_key_in_hot(self):
t = template_format.parse("""
@ -1840,7 +1839,7 @@ class ValidateTest(common.HeatTestCase):
template = tmpl.Template(t)
stack = parser.Stack(self.ctx, 'test_stack', template)
ex = self.assertRaises(exception.StackValidationFailed, stack.validate)
self.assertIn('Properties', six.text_type(ex))
self.assertIn('Properties', str(ex))
def test_validate_resource_invalid_key_cfn(self):
t = template_format.parse("""

View File

@ -15,14 +15,13 @@ import random
import re
import subprocess
import time
import urllib
import fixtures
from heatclient import exc as heat_exceptions
from keystoneauth1 import exceptions as kc_exceptions
from oslo_log import log as logging
from oslo_utils import timeutils
import six
from six.moves import urllib
from tempest import config
import testscenarios
import testtools
@ -59,7 +58,7 @@ def call_until_true(duration, sleep_for, func, *args, **kwargs):
def rand_name(name=''):
randbits = six.text_type(random.randint(1, 0x7fffffff))
randbits = str(random.randint(1, 0x7fffffff))
if name:
return name + '-' + randbits
else:

View File

@ -15,7 +15,6 @@ import json
from heatclient import exc
from oslo_log import log as logging
import six
from testtools import matchers
from heat_integrationtests.common import test
@ -736,7 +735,7 @@ outputs:
stack_identifier, 'ScaleUpPolicy')
error_msg = 'Signal resource during SUSPEND is not supported'
self.assertIn(error_msg, six.text_type(ex))
self.assertIn(error_msg, str(ex))
ev = self.wait_for_event_with_reason(
stack_identifier,
reason='Cannot signal resource during SUSPEND',

View File

@ -13,8 +13,8 @@
import hashlib
import json
import random
from urllib import parse
from six.moves.urllib import parse
from swiftclient import utils as swiftclient_utils
import yaml

View File

@ -14,7 +14,6 @@ import copy
import json
from heatclient import exc
import six
import yaml
from heat_integrationtests.functional import functional_base
@ -88,12 +87,12 @@ resources:
ex = self.assertRaises(exc.HTTPBadRequest, self.update_stack,
stack_identifier, template_two_nested,
environment=env, files=files)
self.assertIn(expected_err, six.text_type(ex))
self.assertIn(expected_err, str(ex))
ex = self.assertRaises(exc.HTTPBadRequest, self.stack_create,
template=template_two_nested,
environment=env, files=files)
self.assertIn(expected_err, six.text_type(ex))
self.assertIn(expected_err, str(ex))
def _validate_resources(self, stack_identifier, expected_count):
resources = self.list_group_resources(stack_identifier,

View File

@ -13,7 +13,6 @@
import json
from heatclient import exc as heat_exceptions
import six
import yaml
from heat_integrationtests.common import test
@ -804,7 +803,7 @@ outputs:
except heat_exceptions.HTTPBadRequest as exc:
exp = ('ERROR: Required property two for facade '
'OS::Thingy missing in provider')
self.assertEqual(exp, six.text_type(exc))
self.assertEqual(exp, str(exc))
def test_missing_output(self):
templ_missing_output = '''
@ -828,7 +827,7 @@ resources:
except heat_exceptions.HTTPBadRequest as exc:
exp = ('ERROR: Attribute here-it-is for facade '
'OS::Thingy missing in provider')
self.assertEqual(exp, six.text_type(exc))
self.assertEqual(exp, str(exc))
class TemplateResourceNewParamTest(functional_base.FunctionalTestsBase):

View File

@ -59,7 +59,6 @@ PyYAML>=3.12 # MIT
requests>=2.14.2 # Apache-2.0
tenacity>=4.4.0 # Apache-2.0
Routes>=2.3.1 # MIT
six>=1.10.0 # MIT
SQLAlchemy!=1.1.5,!=1.1.6,!=1.1.7,!=1.1.8,>=1.0.10 # MIT
sqlalchemy-migrate>=0.11.0 # Apache-2.0
stevedore>=1.20.0 # Apache-2.0

View File

@ -16,7 +16,6 @@ import re
import sys
from oslo_log import log
import six
from heat.common.i18n import _
from heat.engine import constraints
@ -101,7 +100,7 @@ class HeatCustomGuidelines(object):
def _check_resource_schemas(self, resource, schema, schema_name,
error_path=None):
for key, value in six.iteritems(schema):
for key, value in schema.items():
if error_path is None:
error_path = [resource.__name__, key]
else:
@ -129,7 +128,7 @@ class HeatCustomGuidelines(object):
error_path.pop()
def _check_resource_methods(self, resource):
for method in six.itervalues(resource.__dict__):
for method in resource.__dict__.values():
# need to skip non-functions attributes
if not callable(method):
continue
@ -159,7 +158,7 @@ class HeatCustomGuidelines(object):
cls_file = open(cls.__module__.replace('.', '/') + '.py')
except IOError as ex:
LOG.warning('Cannot perform trailing spaces check on '
'resource module: %s', six.text_type(ex))
'resource module: %s', str(ex))
continue
lines = [line.strip() for line in cls_file.readlines()]
idx = 0