diff --git a/lower-constraints.txt b/lower-constraints.txt index 0250a96d6..80bb89137 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -127,7 +127,6 @@ Routes==2.3.1 rsa==3.4.2 setuptools==21.0.0 simplejson==3.13.2 -six==1.10.0 snowballstemmer==1.2.1 sqlalchemy-filters==0.10.0 sqlalchemy-migrate==0.11.0 diff --git a/requirements.txt b/requirements.txt index ebd11af04..d9a6257cf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,7 +19,6 @@ WebOb>=1.7.1 # MIT python-heatclient>=1.10.0 # Apache-2.0 python-keystoneclient>=3.8.0 # Apache-2.0 alembic>=0.8.10 # MIT -six>=1.10.0 # MIT stevedore>=1.20.0 # Apache-2.0 oslo.concurrency>=3.26.0 # Apache-2.0 oslo.config>=5.2.0 # Apache-2.0 diff --git a/tacker/__init__.py b/tacker/__init__.py index 7f5e8f1bb..b53311aa1 100644 --- a/tacker/__init__.py +++ b/tacker/__init__.py @@ -15,9 +15,5 @@ import gettext -import six -if six.PY2: - gettext.install('tacker', unicode=1) -else: - gettext.install('tacker') +gettext.install('tacker') diff --git a/tacker/alarm_receiver.py b/tacker/alarm_receiver.py index 514dfeec9..75aabcb91 100644 --- a/tacker/alarm_receiver.py +++ b/tacker/alarm_receiver.py @@ -11,10 +11,13 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. + +from urllib import parse + from oslo_config import cfg from oslo_log import log as logging from oslo_serialization import jsonutils -from six.moves.urllib import parse + from tacker._i18n import _ from tacker.vnfm.monitor_drivers.token import Token from tacker import wsgi diff --git a/tacker/api/api_common.py b/tacker/api/api_common.py index 2c0f7fb02..24686a2d5 100644 --- a/tacker/api/api_common.py +++ b/tacker/api/api_common.py @@ -19,7 +19,7 @@ from oslo_config import cfg import oslo_i18n from oslo_log import log as logging from oslo_policy import policy as oslo_policy -from six.moves.urllib import parse as urllib_parse +from urllib import parse as urllib_parse from webob import exc from tacker._i18n import _ diff --git a/tacker/api/common/_filters.py b/tacker/api/common/_filters.py index 45d4ea918..f887f1ebc 100644 --- a/tacker/api/common/_filters.py +++ b/tacker/api/common/_filters.py @@ -20,7 +20,6 @@ import abc from oslo_utils import strutils from oslo_utils import timeutils from oslo_utils import uuidutils -import six from tacker.common import exceptions as exception @@ -30,8 +29,7 @@ SUPPORTED_OP_ONE = ['eq', 'neq', 'gt', 'lt', 'gte', 'lte'] SUPPORTED_OP_MULTI = ['in', 'nin', 'cont', 'ncont'] -@six.add_metaclass(abc.ABCMeta) -class BaseFilter(object): +class BaseFilter(object, metaclass=abc.ABCMeta): """Abstract base class for Filter classes.""" @abc.abstractmethod @@ -185,8 +183,7 @@ class Filter(BaseFilter): for value in self.values: error = False - if attribute_info[1] == 'string' and not isinstance(value, - six.string_types): + if attribute_info[1] == 'string' and not isinstance(value, str): error = True elif attribute_info[1] == 'number': if not strutils.is_int_like(value): diff --git a/tacker/api/common/attribute_filter.py b/tacker/api/common/attribute_filter.py index db9dbedc6..ab43791d0 100644 --- a/tacker/api/common/attribute_filter.py +++ b/tacker/api/common/attribute_filter.py @@ -16,7 +16,6 @@ # under the License. import re -import six from tacker.api.common import _filters from tacker.common import exceptions as exception @@ -68,8 +67,7 @@ class ParseStateMeta(type): return super(ParseStateMeta, mcs).__new__(mcs, name, bases, cls_dict) -@six.add_metaclass(ParseStateMeta) -class ParseState(object): +class ParseState(object, metaclass=ParseStateMeta): """Implement the core of parsing the policy language. Uses a greedy reduction algorithm to reduce a sequence of tokens into diff --git a/tacker/api/extensions.py b/tacker/api/extensions.py index 27d3a95a1..0a1ff7b63 100644 --- a/tacker/api/extensions.py +++ b/tacker/api/extensions.py @@ -21,7 +21,6 @@ from oslo_config import cfg from oslo_log import log as logging from oslo_utils import importutils import routes -import six import webob.dec import webob.exc @@ -35,8 +34,7 @@ from tacker import wsgi LOG = logging.getLogger(__name__) -@six.add_metaclass(abc.ABCMeta) -class PluginInterface(object): +class PluginInterface(object, metaclass=abc.ABCMeta): @classmethod def __subclasshook__(cls, klass): diff --git a/tacker/api/v1/attributes.py b/tacker/api/v1/attributes.py index fa3af273a..eec521ea8 100644 --- a/tacker/api/v1/attributes.py +++ b/tacker/api/v1/attributes.py @@ -18,7 +18,6 @@ import re import netaddr from oslo_log import log as logging from oslo_utils import uuidutils -import six from tacker._i18n import _ from tacker.common import exceptions as n_exc @@ -94,7 +93,7 @@ def _validate_string_or_none(data, max_len=None): def _validate_string(data, max_len=None): - if not isinstance(data, six.string_types): + if not isinstance(data, str): msg = _("'%s' is not a valid string") % data LOG.debug(msg) return msg @@ -472,7 +471,7 @@ def _validate_non_negative(data, valid_values=None): def convert_to_boolean(data): - if isinstance(data, six.string_types): + if isinstance(data, str): val = data.lower() if val == "true" or val == "1": return True @@ -539,7 +538,7 @@ def convert_none_to_empty_dict(value): def convert_to_list(data): if data is None: return [] - elif hasattr(data, '__iter__') and not isinstance(data, six.string_types): + elif hasattr(data, '__iter__') and not isinstance(data, str): return list(data) else: return [data] diff --git a/tacker/api/v1/router.py b/tacker/api/v1/router.py index 8cc8aab6e..d10f21749 100644 --- a/tacker/api/v1/router.py +++ b/tacker/api/v1/router.py @@ -14,7 +14,7 @@ # limitations under the License. import routes as routes_mapper -import six.moves.urllib.parse as urlparse +from urllib import parse as urlparse import webob import webob.dec import webob.exc diff --git a/tacker/api/validation/parameter_types.py b/tacker/api/validation/parameter_types.py index f59990a95..eb5eb1c99 100644 --- a/tacker/api/validation/parameter_types.py +++ b/tacker/api/validation/parameter_types.py @@ -21,8 +21,6 @@ Common parameter types for validating request Body. import re import unicodedata -import six - def _is_printable(char): """determine if a unicode code point is printable. @@ -40,7 +38,7 @@ def _is_printable(char): def _get_all_chars(): for i in range(0xFFFF): - yield six.unichr(i) + yield chr(i) # build a regex that matches all printable characters. This allows diff --git a/tacker/api/validation/validators.py b/tacker/api/validation/validators.py index 76e23205c..cf7e1f2a9 100644 --- a/tacker/api/validation/validators.py +++ b/tacker/api/validation/validators.py @@ -23,7 +23,6 @@ from jsonschema import exceptions as jsonschema_exc import netaddr from oslo_utils import uuidutils import rfc3986 -import six import webob from tacker.common import exceptions as exception @@ -65,7 +64,7 @@ def validate_mac_address_or_none(instance): def _validate_query_parameter_without_value(parameter_name, instance): """The query parameter is a flag without a value.""" - if not (isinstance(instance, six.text_type) and len(instance)): + if not (isinstance(instance, str) and len(instance)): return True msg = _("The parameter '%s' is a flag. It shouldn't contain any value.") @@ -156,5 +155,4 @@ class _SchemaValidator(object): except TypeError as ex: # NOTE: If passing non string value to patternProperties parameter, # TypeError happens. Here is for catching the TypeError. - detail = six.text_type(ex) - raise exception.ValidationError(detail=detail) + raise exception.ValidationError(detail=str(ex)) diff --git a/tacker/api/vnflcm/v1/controller.py b/tacker/api/vnflcm/v1/controller.py index c4d49fb1d..251a61f3c 100644 --- a/tacker/api/vnflcm/v1/controller.py +++ b/tacker/api/vnflcm/v1/controller.py @@ -15,7 +15,6 @@ import datetime import requests -import six import tacker.conf import webob @@ -34,8 +33,8 @@ import json import re import traceback -from six.moves import http_client -from six.moves.urllib import parse +from http import client as http_client +from urllib import parse from tacker._i18n import _ from tacker.api.schemas import vnf_lcm @@ -186,9 +185,8 @@ class VnfLcmController(wsgi.Controller): raise webob.exc.HTTPNotFound(explanation=msg) except Exception as exc: msg = _("Encountered error while fetching vnf: %s") % id - LOG.debug("{}: {}".format(msg, six.text_type(exc))) - raise webob.exc.HTTPInternalServerError(explanation=six. - text_type(exc)) + LOG.debug("{}: {}".format(msg, str(exc))) + raise webob.exc.HTTPInternalServerError(explanation=str(exc)) return vnf def _validate_flavour_and_inst_level(self, context, req_body, @@ -463,11 +461,11 @@ class VnfLcmController(wsgi.Controller): return wsgi.ResponseObject(result, headers=headers) except nfvo.VimDefaultNotDefined as exc: - raise webob.exc.HTTPBadRequest(explanation=six.text_type(exc)) + raise webob.exc.HTTPBadRequest(explanation=str(exc)) except(sqlexc.SQLAlchemyError, Exception)\ as exc: raise webob.exc.HTTPInternalServerError( - explanation=six.text_type(exc)) + explanation=str(exc)) except webob.exc.HTTPNotFound as e: return self._make_problem_detail(str(e), 404, 'Not Found') @@ -566,7 +564,7 @@ class VnfLcmController(wsgi.Controller): self._validate_flavour_and_inst_level(context, req_body, vnf_instance) except exceptions.NotFound as ex: - raise webob.exc.HTTPBadRequest(explanation=six.text_type(ex)) + raise webob.exc.HTTPBadRequest(explanation=str(ex)) instantiate_vnf_request = \ objects.InstantiateVnfRequest.obj_from_primitive( diff --git a/tacker/api/vnfpkgm/v1/controller.py b/tacker/api/vnfpkgm/v1/controller.py index ceaf47feb..0a8f671e9 100644 --- a/tacker/api/vnfpkgm/v1/controller.py +++ b/tacker/api/vnfpkgm/v1/controller.py @@ -13,10 +13,14 @@ # License for the specific language governing permissions and limitations # under the License. +from http import client as http_client from io import BytesIO import json import mimetypes import os +import webob +import zipfile +from zipfile import ZipFile from glance_store import exceptions as store_exceptions from oslo_config import cfg @@ -24,11 +28,6 @@ from oslo_log import log as logging from oslo_utils import encodeutils from oslo_utils import excutils from oslo_utils import uuidutils -import six -from six.moves import http_client -import webob -import zipfile -from zipfile import ZipFile from tacker._i18n import _ from tacker.api.schemas import vnf_packages @@ -256,7 +255,7 @@ class VnfPkgmController(wsgi.Controller): zip_file_size) else: chunk_size = zip_file_size - response.headers['Content-Length'] = six.text_type(chunk_size) + response.headers['Content-Length'] = str(chunk_size) return response def _get_csar_zip_data(self, uuid, location, offset=0, chunk_size=None): @@ -489,8 +488,7 @@ class VnfPkgmController(wsgi.Controller): get_vnf_package_vnfd(context, vnf_package) except exceptions.FailedToGetVnfdData as e: LOG.error(e.msg) - raise webob.exc.HTTPInternalServerError( - explanation=six.text_type(e.msg)) + raise webob.exc.HTTPInternalServerError(explanation=str(e.msg)) if 'text/plain' in accept_headers: # Checking for yaml files only. This is required when there is diff --git a/tacker/common/container/kubernetes_utils.py b/tacker/common/container/kubernetes_utils.py index a0caee4a0..385de5e68 100644 --- a/tacker/common/container/kubernetes_utils.py +++ b/tacker/common/container/kubernetes_utils.py @@ -15,7 +15,6 @@ import os import re -import six import tempfile from cryptography import fernet @@ -140,10 +139,7 @@ class KubernetesHTTPAPI(object): ca_cert = re.sub(r'END\nCERT', r'END CERT', ca_cert) try: with open(file_path, 'w') as f: - if six.PY2: - f.write(ca_cert.decode('utf-8')) - else: - f.write(ca_cert) + f.write(ca_cert) LOG.debug('ca cert temp file successfully stored in %s', file_path) except IOError: diff --git a/tacker/common/csar_utils.py b/tacker/common/csar_utils.py index 8c486b551..cf0368c71 100644 --- a/tacker/common/csar_utils.py +++ b/tacker/common/csar_utils.py @@ -12,26 +12,26 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. + from copy import deepcopy import hashlib import os import re import shutil - +from urllib.parse import urlparse +from urllib import request as urllib2 import yaml +import zipfile from oslo_log import log as logging from oslo_utils import encodeutils from oslo_utils import excutils -from six.moves.urllib.parse import urlparse from toscaparser.prereq.csar import CSAR from toscaparser.tosca_template import ToscaTemplate -import zipfile from tacker.common import exceptions import tacker.conf from tacker.extensions import vnfm -import urllib.request as urllib2 HASH_DICT = { diff --git a/tacker/common/utils.py b/tacker/common/utils.py index dfe26e662..b8feb06e5 100644 --- a/tacker/common/utils.py +++ b/tacker/common/utils.py @@ -28,6 +28,7 @@ import random import re import signal import socket +from stevedore import driver import string import sys @@ -38,9 +39,8 @@ from oslo_config import cfg from oslo_log import log as logging from oslo_utils import excutils from oslo_utils import importutils -from six.moves import urllib -from six.moves.urllib import parse as urlparse -from stevedore import driver +import urllib +from urllib import parse as urlparse try: from eventlet import sleep except ImportError: diff --git a/tacker/db/db_base.py b/tacker/db/db_base.py index 76425e6a0..ad2a84b95 100644 --- a/tacker/db/db_base.py +++ b/tacker/db/db_base.py @@ -17,7 +17,6 @@ from datetime import datetime import weakref from oslo_log import log as logging -import six from sqlalchemy.orm import exc as orm_exc from sqlalchemy import sql @@ -94,13 +93,13 @@ class CommonDbMixin(object): model_hooks = self._model_query_hooks.get(model, {}) for _name, hooks in model_hooks.items(): query_hook = hooks.get('query') - if isinstance(query_hook, six.string_types): + if isinstance(query_hook, str): query_hook = getattr(self, query_hook, None) if query_hook: query = query_hook(context, model, query) filter_hook = hooks.get('filter') - if isinstance(filter_hook, six.string_types): + if isinstance(filter_hook, str): filter_hook = getattr(self, filter_hook, None) if filter_hook: query_filter = filter_hook(context, model, query_filter) @@ -146,7 +145,7 @@ class CommonDbMixin(object): model_hooks = self._model_query_hooks.get(model, {}) for _name, hooks in model_hooks.items(): result_filter = hooks.get('result_filters', None) - if isinstance(result_filter, six.string_types): + if isinstance(result_filter, str): result_filter = getattr(self, result_filter, None) if result_filter: @@ -159,7 +158,7 @@ class CommonDbMixin(object): for func in self._dict_extend_functions.get( resource_type, []): args = (response, db_object) - if isinstance(func, six.string_types): + if isinstance(func, str): func = getattr(self, func, None) else: # must call unbound method - use self as 1st argument diff --git a/tacker/db/sqlalchemyutils.py b/tacker/db/sqlalchemyutils.py index 9ddb82cc2..f142b9e9f 100644 --- a/tacker/db/sqlalchemyutils.py +++ b/tacker/db/sqlalchemyutils.py @@ -13,7 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -from six import moves import sqlalchemy from sqlalchemy.orm.properties import RelationshipProperty @@ -85,7 +84,7 @@ def paginate_query(query, model, limit, sorts, marker_obj=None): criteria_list = [] for i, sort in enumerate(sorts): crit_attrs = [(getattr(model, sorts[j][0]) == marker_values[j]) - for j in moves.xrange(i)] + for j in range(i)] model_attr = getattr(model, sort[0]) if sort[1]: crit_attrs.append((model_attr > marker_values[i])) diff --git a/tacker/extensions/common_services.py b/tacker/extensions/common_services.py index b31d49de6..ba695cb7e 100644 --- a/tacker/extensions/common_services.py +++ b/tacker/extensions/common_services.py @@ -15,8 +15,6 @@ import abc -import six - from tacker._i18n import _ from tacker.api import extensions from tacker.api.v1 import attributes as attr @@ -137,8 +135,8 @@ class Common_services(extensions.ExtensionDescriptor): return version_map.get(version, {}) -@six.add_metaclass(abc.ABCMeta) -class CommonServicesPluginBase(service_base.NFVPluginBase): +class CommonServicesPluginBase(service_base.NFVPluginBase, + metaclass=abc.ABCMeta): def get_plugin_name(self): return constants.COMMONSERVICES diff --git a/tacker/extensions/nfvo.py b/tacker/extensions/nfvo.py index 9b4ae735c..10147c0f0 100644 --- a/tacker/extensions/nfvo.py +++ b/tacker/extensions/nfvo.py @@ -15,8 +15,6 @@ import abc -import six - from tacker._i18n import _ from tacker.api import extensions from tacker.api.v1 import attributes as attr @@ -870,8 +868,7 @@ class Nfvo(extensions.ExtensionDescriptor): return version_map.get(version, {}) -@six.add_metaclass(abc.ABCMeta) -class NFVOPluginBase(service_base.NFVPluginBase): +class NFVOPluginBase(service_base.NFVPluginBase, metaclass=abc.ABCMeta): def get_plugin_name(self): return constants.NFVO diff --git a/tacker/extensions/nfvo_plugins/network_service.py b/tacker/extensions/nfvo_plugins/network_service.py index 5fb0d4d8a..d00fb5ff8 100644 --- a/tacker/extensions/nfvo_plugins/network_service.py +++ b/tacker/extensions/nfvo_plugins/network_service.py @@ -11,15 +11,13 @@ # under the License. import abc -import six from tacker._i18n import _ from tacker.common import exceptions from tacker.services import service_base -@six.add_metaclass(abc.ABCMeta) -class NSPluginBase(service_base.NFVPluginBase): +class NSPluginBase(service_base.NFVPluginBase, metaclass=abc.ABCMeta): @abc.abstractmethod def create_nsd(self, context, nsd): diff --git a/tacker/extensions/nfvo_plugins/vnffg.py b/tacker/extensions/nfvo_plugins/vnffg.py index e490d208a..721c95c1b 100644 --- a/tacker/extensions/nfvo_plugins/vnffg.py +++ b/tacker/extensions/nfvo_plugins/vnffg.py @@ -14,13 +14,11 @@ # under the License. import abc -import six from tacker.services import service_base -@six.add_metaclass(abc.ABCMeta) -class VNFFGPluginBase(service_base.NFVPluginBase): +class VNFFGPluginBase(service_base.NFVPluginBase, metaclass=abc.ABCMeta): @abc.abstractmethod def create_vnffgd(self, context, vnffgd): diff --git a/tacker/extensions/vnfm.py b/tacker/extensions/vnfm.py index f3ddf1ed6..40d040b0e 100644 --- a/tacker/extensions/vnfm.py +++ b/tacker/extensions/vnfm.py @@ -16,7 +16,6 @@ import abc from oslo_log import log as logging -import six from tacker._i18n import _ from tacker.api import extensions @@ -607,8 +606,7 @@ class Vnfm(extensions.ExtensionDescriptor): return version_map.get(version, {}) -@six.add_metaclass(abc.ABCMeta) -class VNFMPluginBase(service_base.NFVPluginBase): +class VNFMPluginBase(service_base.NFVPluginBase, metaclass=abc.ABCMeta): def get_plugin_name(self): return constants.VNFM diff --git a/tacker/glance_store/store.py b/tacker/glance_store/store.py index 7681d3f64..10e10b0d1 100644 --- a/tacker/glance_store/store.py +++ b/tacker/glance_store/store.py @@ -15,13 +15,13 @@ import base64 import os +import urllib import glance_store from glance_store import exceptions as store_exceptions from oslo_log import log as logging from oslo_utils import encodeutils from oslo_utils import units -from six.moves import urllib from tacker.common import exceptions from tacker.common import utils @@ -148,8 +148,7 @@ def _get_csar_chunks(package_uuid, location, offset, chunk_size): def _add_basic_auth(request, username, password): """A helper function to add basic authentication. - This function adds basic authentication information to a six.moves.urllib - request. + This function adds basic authentication information to a urllib request. """ auth_str = base64.encodestring(('%s:%s' % ( username, password)).encode()).decode().strip() diff --git a/tacker/keymgr/key_manager.py b/tacker/keymgr/key_manager.py index ff62cf198..f901c011c 100644 --- a/tacker/keymgr/key_manager.py +++ b/tacker/keymgr/key_manager.py @@ -19,11 +19,8 @@ Key manager API import abc -import six - -@six.add_metaclass(abc.ABCMeta) -class KeyManager(object): +class KeyManager(object, metaclass=abc.ABCMeta): """Base Key Manager Interface A Key Manager is responsible for creating, reading, and deleting keys. diff --git a/tacker/nfvo/drivers/vim/abstract_vim_driver.py b/tacker/nfvo/drivers/vim/abstract_vim_driver.py index c3c8a4305..5900aadc1 100644 --- a/tacker/nfvo/drivers/vim/abstract_vim_driver.py +++ b/tacker/nfvo/drivers/vim/abstract_vim_driver.py @@ -15,13 +15,10 @@ import abc -import six - from tacker.api import extensions -@six.add_metaclass(abc.ABCMeta) -class VimAbstractDriver(extensions.PluginInterface): +class VimAbstractDriver(extensions.PluginInterface, metaclass=abc.ABCMeta): @abc.abstractmethod def get_type(self): diff --git a/tacker/nfvo/drivers/vim/openstack_driver.py b/tacker/nfvo/drivers/vim/openstack_driver.py index d7cca2a80..0833f38ca 100644 --- a/tacker/nfvo/drivers/vim/openstack_driver.py +++ b/tacker/nfvo/drivers/vim/openstack_driver.py @@ -15,7 +15,6 @@ # under the License. import os -import six import yaml from keystoneauth1 import exceptions @@ -253,10 +252,7 @@ class OpenStack_Driver(abstract_vim_driver.VimAbstractDriver, key_file = os.path.join(CONF.vim_keys.openstack, vim_id) try: with open(key_file, 'wb') as f: - if six.PY2: - f.write(fernet_key.decode('utf-8')) - else: - f.write(fernet_key) + f.write(fernet_key) LOG.debug('VIM auth successfully stored for vim %s', vim_id) except IOError: diff --git a/tacker/nfvo/drivers/vnffg/abstract_vnffg_driver.py b/tacker/nfvo/drivers/vnffg/abstract_vnffg_driver.py index ab5ba2738..96c8f0e08 100644 --- a/tacker/nfvo/drivers/vnffg/abstract_vnffg_driver.py +++ b/tacker/nfvo/drivers/vnffg/abstract_vnffg_driver.py @@ -12,13 +12,10 @@ import abc -import six - from tacker.api import extensions -@six.add_metaclass(abc.ABCMeta) -class VnffgAbstractDriver(extensions.PluginInterface): +class VnffgAbstractDriver(extensions.PluginInterface, metaclass=abc.ABCMeta): @abc.abstractmethod def get_type(self): diff --git a/tacker/policy.py b/tacker/policy.py index 1435440ad..9b9bfbf4d 100644 --- a/tacker/policy.py +++ b/tacker/policy.py @@ -23,7 +23,6 @@ from oslo_log import log as logging from oslo_policy import policy from oslo_utils import excutils from oslo_utils import importutils -import six from tacker._i18n import _ from tacker.api.v1 import attributes @@ -297,7 +296,7 @@ class OwnerCheck(policy.Check): LOG.exception('Policy check error while calling %s!', f) match = self.match % target if self.kind in creds: - return match == six.text_type(creds[self.kind]) + return match == str(creds[self.kind]) return False diff --git a/tacker/services/service_base.py b/tacker/services/service_base.py index 8000d22b7..907264209 100644 --- a/tacker/services/service_base.py +++ b/tacker/services/service_base.py @@ -15,13 +15,10 @@ import abc -import six - from tacker.api import extensions -@six.add_metaclass(abc.ABCMeta) -class NFVPluginBase(extensions.PluginInterface): +class NFVPluginBase(extensions.PluginInterface, metaclass=abc.ABCMeta): """Define base interface for any Advanced Service plugin.""" supported_extension_aliases = [] diff --git a/tacker/tests/functional/vnfpkgm/test_vnf_package.py b/tacker/tests/functional/vnfpkgm/test_vnf_package.py index 5d177cafe..d66d36b3b 100644 --- a/tacker/tests/functional/vnfpkgm/test_vnf_package.py +++ b/tacker/tests/functional/vnfpkgm/test_vnf_package.py @@ -16,9 +16,9 @@ from copy import deepcopy import ddt import os -from six.moves import urllib import tempfile import time +import urllib import zipfile from oslo_serialization import jsonutils diff --git a/tacker/tests/unit/api/v1/test_vim.py b/tacker/tests/unit/api/v1/test_vim.py index c47bebeec..39240c216 100644 --- a/tacker/tests/unit/api/v1/test_vim.py +++ b/tacker/tests/unit/api/v1/test_vim.py @@ -16,7 +16,6 @@ from unittest import mock import ddt -import six from webob import exc from tacker.api.v1 import base as v1_base @@ -126,7 +125,7 @@ class VIMCreateTestCase(base.TestCase): exp = self.assertRaises(exc.HTTPBadRequest, self.controller.create, request, vim_dict) - self.assertEqual(msg, six.text_type(exp)) + self.assertEqual(msg, str(exp)) @ddt.data("", " ", None, 123) def test_create_vim_with_invalid_type(self, value): @@ -152,7 +151,7 @@ class VIMCreateTestCase(base.TestCase): exp = self.assertRaises(exc.HTTPBadRequest, self.controller.create, request, vim_dict) - self.assertEqual(msg, six.text_type(exp)) + self.assertEqual(msg, str(exp)) @ddt.data('', 'testing', {}) def test_create_vim_invalid_vim_project(self, value): @@ -167,4 +166,4 @@ class VIMCreateTestCase(base.TestCase): exp = self.assertRaises(exc.HTTPBadRequest, self.controller.create, request, vim_dict) - self.assertEqual(msg, six.text_type(exp)) + self.assertEqual(msg, str(exp)) diff --git a/tacker/tests/unit/api/v2/test_api_v2.py b/tacker/tests/unit/api/v2/test_api_v2.py index 1a8135472..54b5edd71 100644 --- a/tacker/tests/unit/api/v2/test_api_v2.py +++ b/tacker/tests/unit/api/v2/test_api_v2.py @@ -19,8 +19,7 @@ from unittest import mock from oslo_config import cfg from oslo_policy import policy as common_policy from oslo_utils import uuidutils -import six -import six.moves.urllib.parse as urlparse +from urllib import parse as urlparse import webob from webob import exc import webtest @@ -932,8 +931,7 @@ class JSONV2TestCase(APIv2TestBase, testlib_api.WebTestCase): return_value.update(initial_input['port']) instance = self.plugin.return_value - instance.get_network.return_value = {'tenant_id': - six.text_type(tenant_id)} + instance.get_network.return_value = {'tenant_id': str(tenant_id)} instance.get_ports_count.return_value = 1 instance.create_port.return_value = return_value res = self.api.post(_get_path('ports', fmt=self.fmt), diff --git a/tacker/tests/unit/conductor/test_conductor_server.py b/tacker/tests/unit/conductor/test_conductor_server.py index fd36eb11a..df1c58081 100644 --- a/tacker/tests/unit/conductor/test_conductor_server.py +++ b/tacker/tests/unit/conductor/test_conductor_server.py @@ -21,15 +21,16 @@ import json import os import requests import shutil -import six.moves.urllib.error as urlerr import sys -import tacker.conf +import unittest +from unittest import mock +import urllib +from urllib import error as urlerr import yaml from glance_store import exceptions as store_exceptions from oslo_config import cfg from oslo_serialization import jsonutils -from six.moves import urllib from tacker import auth from tacker.common import coordination @@ -37,6 +38,7 @@ from tacker.common import csar_utils from tacker.common import driver_manager from tacker.common import exceptions from tacker.conductor import conductor_server +import tacker.conf from tacker import context from tacker import context as t_context from tacker.db.db_sqlalchemy import models @@ -59,8 +61,6 @@ from tacker.tests import utils from tacker.tests import uuidsentinel from tacker.vnfm import nfvo_client as test_nfvo_client from tacker.vnfm import vim_client -import unittest -from unittest import mock CONF = tacker.conf.CONF diff --git a/tacker/tests/unit/db/test_db_migration.py b/tacker/tests/unit/db/test_db_migration.py index 35b5bb753..74902c3e3 100644 --- a/tacker/tests/unit/db/test_db_migration.py +++ b/tacker/tests/unit/db/test_db_migration.py @@ -102,7 +102,7 @@ class TestCli(base.BaseTestCase): with mock.patch('alembic.script.ScriptDirectory.from_config') as fc: fc.return_value.get_heads.return_value = heads fc.return_value.get_current_head.return_value = heads[0] - with mock.patch('six.moves.builtins.open') as mock_open: + with mock.patch('builtins.open') as mock_open: mock_open.return_value.__enter__ = lambda s: s mock_open.return_value.__exit__ = mock.Mock() mock_open.return_value.read.return_value = file_content @@ -148,7 +148,7 @@ class TestCli(base.BaseTestCase): with mock.patch('alembic.script.ScriptDirectory.from_config') as fc: fc.return_value.get_heads.return_value = ['a'] fc.return_value.get_current_head.return_value = 'a' - with mock.patch('six.moves.builtins.open') as mock_open: + with mock.patch('builtins.open') as mock_open: mock_open.return_value.__enter__ = lambda s: s mock_open.return_value.__exit__ = mock.Mock() diff --git a/tacker/tests/unit/glance_store/test_store.py b/tacker/tests/unit/glance_store/test_store.py index 88df4de0a..e76a252a6 100644 --- a/tacker/tests/unit/glance_store/test_store.py +++ b/tacker/tests/unit/glance_store/test_store.py @@ -16,8 +16,8 @@ from unittest import mock import glance_store -from six.moves import urllib -import six.moves.urllib.error as urlerr +import urllib +from urllib import error as urlerr from tacker.common import exceptions import tacker.conf diff --git a/tacker/tests/unit/objects/test_fields.py b/tacker/tests/unit/objects/test_fields.py index 0b045ac46..2fde39492 100644 --- a/tacker/tests/unit/objects/test_fields.py +++ b/tacker/tests/unit/objects/test_fields.py @@ -12,8 +12,6 @@ # License for the specific language governing permissions and limitations # under the License. -import six - from tacker.objects import base from tacker.objects import fields from tacker.tests.unit import base as test_base @@ -24,8 +22,6 @@ class TestString(test_base.TestCase): super(TestString, self).setUp() self.field = fields.StringField() self.coerce_good_values = [('foo', 'foo'), (1, '1'), (True, 'True')] - if six.PY2: - self.coerce_good_values.append((int(1), '1')) self.coerce_bad_values = [None] def test_stringify(self): diff --git a/tacker/tests/unit/test_policy.py b/tacker/tests/unit/test_policy.py index 177c0caba..8639070c0 100644 --- a/tacker/tests/unit/test_policy.py +++ b/tacker/tests/unit/test_policy.py @@ -15,15 +15,14 @@ """Test of Policy Engine For Tacker""" -from unittest import mock - import fixtures -import six +import io +from unittest import mock +from urllib import request as urlrequest from oslo_policy import policy as common_policy from oslo_serialization import jsonutils as json from oslo_utils import importutils -from six.moves.urllib import request as urlrequest import tacker from tacker.api.v1 import attributes @@ -127,7 +126,7 @@ class PolicyTestCase(base.BaseTestCase): def test_enforce_http_true(self): def fakeurlopen(url, post_data): - return six.StringIO("True") + return io.StringIO("True") with mock.patch.object(urlrequest, 'urlopen', new=fakeurlopen): action = "example:get_http" @@ -138,7 +137,7 @@ class PolicyTestCase(base.BaseTestCase): def test_enforce_http_false(self): def fakeurlopen(url, post_data): - return six.StringIO("False") + return io.StringIO("False") with mock.patch.object(urlrequest, 'urlopen', new=fakeurlopen): action = "example:get_http" diff --git a/tacker/tests/unit/test_wsgi.py b/tacker/tests/unit/test_wsgi.py index 3966136ee..787fcde52 100644 --- a/tacker/tests/unit/test_wsgi.py +++ b/tacker/tests/unit/test_wsgi.py @@ -14,20 +14,18 @@ # under the License. import os -from unittest import mock - -import oslo_i18n import socket - -from oslo_config import cfg -import six.moves.urllib.request as urllibrequest import testtools +from unittest import mock +from urllib import request as urllibrequest import webob import webob.exc +from oslo_config import cfg +import oslo_i18n + from tacker.common import exceptions as exception from tacker.tests import base -from tacker.tests.common import helpers from tacker import wsgi CONF = cfg.CONF @@ -467,18 +465,6 @@ class JSONDictSerializerTest(base.BaseTestCase): self.assertEqual(expected_json, result) - # The tested behaviour is only meant to be witnessed in Python 2, so it is - # OK to skip this test with Python 3. - @helpers.requires_py2 - def test_json_with_utf8(self): - input_dict = dict(servers=dict(a=(2, '\xe7\xbd\x91\xe7\xbb\x9c'))) - expected_json = b'{"servers":{"a":[2,"\\u7f51\\u7edc"]}}' - serializer = wsgi.JSONDictSerializer() - result = serializer.serialize(input_dict) - result = result.replace(b'\n', b'').replace(b' ', b'') - - self.assertEqual(expected_json, result) - def test_json_with_unicode(self): input_dict = dict(servers=dict(a=(2, u'\u7f51\u7edc'))) expected_json = b'{"servers":{"a":[2,"\\u7f51\\u7edc"]}}' diff --git a/tacker/tests/unit/tests/test_post_mortem_debug.py b/tacker/tests/unit/tests/test_post_mortem_debug.py index 43d67b050..500c5b938 100644 --- a/tacker/tests/unit/tests/test_post_mortem_debug.py +++ b/tacker/tests/unit/tests/test_post_mortem_debug.py @@ -16,8 +16,6 @@ import sys from unittest import mock -from six import moves - from tacker.tests import base from tacker.tests import post_mortem_debug @@ -64,7 +62,7 @@ class TestGetIgnoredTraceback(base.BaseTestCase): tb = root_tb tracebacks = [tb] - for x in moves.xrange(len(ignored_bit_array) - 1): + for x in range(len(ignored_bit_array) - 1): tb.tb_next = mock.Mock() tb = tb.tb_next tracebacks.append(tb) diff --git a/tacker/tests/unit/vnflcm/test_controller.py b/tacker/tests/unit/vnflcm/test_controller.py index 49c9f2179..7d05b8885 100644 --- a/tacker/tests/unit/vnflcm/test_controller.py +++ b/tacker/tests/unit/vnflcm/test_controller.py @@ -12,19 +12,19 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -from unittest import mock import codecs -import os - import ddt +from http import client as http_client import json -from oslo_serialization import jsonutils -from six.moves import http_client +import os +from unittest import mock import urllib import webob from webob import exc +from oslo_serialization import jsonutils + from tacker.api.vnflcm.v1 import controller from tacker.api.vnflcm.v1 import sync_resource from tacker.common import exceptions diff --git a/tacker/tests/unit/vnfm/monitor_drivers/http_ping/test_http_ping.py b/tacker/tests/unit/vnfm/monitor_drivers/http_ping/test_http_ping.py index 98a93f9a0..38bebfa1a 100644 --- a/tacker/tests/unit/vnfm/monitor_drivers/http_ping/test_http_ping.py +++ b/tacker/tests/unit/vnfm/monitor_drivers/http_ping/test_http_ping.py @@ -12,10 +12,9 @@ # under the License. # -from unittest import mock - -import six.moves.urllib.error as urlerr import testtools +from unittest import mock +from urllib import error as urlerr from tacker.vnfm.monitor_drivers.http_ping import http_ping @@ -26,7 +25,7 @@ class TestVNFMonitorHTTPPing(testtools.TestCase): super(TestVNFMonitorHTTPPing, self).setUp() self.monitor_http_ping = http_ping.VNFMonitorHTTPPing() - @mock.patch('six.moves.urllib.request.urlopen') + @mock.patch('urllib.request.urlopen') def test_monitor_call_for_success(self, mock_urlopen): test_vnf = {} test_kwargs = { @@ -36,7 +35,7 @@ class TestVNFMonitorHTTPPing(testtools.TestCase): test_kwargs) mock_urlopen.assert_called_once_with('http://a.b.c.d:80', timeout=5) - @mock.patch('six.moves.urllib.request.urlopen') + @mock.patch('urllib.request.urlopen') def test_monitor_call_for_failure(self, mock_urlopen): mock_urlopen.side_effect = urlerr.URLError("MOCK Error") test_vnf = {} diff --git a/tacker/tests/unit/vnfpkgm/test_controller.py b/tacker/tests/unit/vnfpkgm/test_controller.py index 96ded50d1..bb92dbc49 100644 --- a/tacker/tests/unit/vnfpkgm/test_controller.py +++ b/tacker/tests/unit/vnfpkgm/test_controller.py @@ -12,16 +12,18 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -from unittest import mock + import ddt +from http import client as http_client import json import os -from oslo_serialization import jsonutils -from six.moves import http_client -from six.moves import urllib +from unittest import mock +import urllib from webob import exc +from oslo_serialization import jsonutils + from tacker.api.vnfpkgm.v1 import controller from tacker.common import exceptions as tacker_exc from tacker.conductor.conductorrpc.vnf_pkgm_rpc import VNFPackageRPCAPI diff --git a/tacker/vnflcm/abstract_driver.py b/tacker/vnflcm/abstract_driver.py index f03b046cd..270cfe6ce 100644 --- a/tacker/vnflcm/abstract_driver.py +++ b/tacker/vnflcm/abstract_driver.py @@ -15,11 +15,8 @@ import abc -import six - -@six.add_metaclass(abc.ABCMeta) -class VnfInstanceAbstractDriver(object): +class VnfInstanceAbstractDriver(object, metaclass=abc.ABCMeta): @abc.abstractmethod def instantiate_vnf(self, context, vnf_instance_id, instantiate_vnf_req): diff --git a/tacker/vnflcm/utils.py b/tacker/vnflcm/utils.py index ca32dd9cd..c4d3a36c4 100644 --- a/tacker/vnflcm/utils.py +++ b/tacker/vnflcm/utils.py @@ -16,7 +16,6 @@ import copy import io import os -import six import yaml from oslo_config import cfg @@ -373,7 +372,7 @@ def _create_grant_request(vnfd_dict, package_uuid): artifacts = value.get('artifacts', {}) for artifact, sw_image in artifacts.items(): artifact_image_path = None - if isinstance(sw_image, six.string_types): + if isinstance(sw_image, str): artifact_image_path = sw_image elif sw_image.get('type') == 'tosca.artifacts.nfv.SwImage': artifact_image_path = sw_image.get('file', {}) diff --git a/tacker/vnflcm/vnflcm_driver.py b/tacker/vnflcm/vnflcm_driver.py index 19ee1c586..ad03223f1 100644 --- a/tacker/vnflcm/vnflcm_driver.py +++ b/tacker/vnflcm/vnflcm_driver.py @@ -18,7 +18,6 @@ from datetime import datetime import functools import inspect import re -import six import time import traceback import yaml @@ -533,7 +532,7 @@ class VnfLcmDriver(abstract_driver.VnfInstanceAbstractDriver): "%(id)s before respawning. The vnf is in " "inconsistent state. Error: %(error)s") LOG.error(err_msg % {"id": vnf_instance.id, - "error": six.text_type(exc)}) + "error": str(exc)}) raise exceptions.VnfHealFailed(id=vnf_instance.id, error=encodeutils.exception_to_unicode(exc)) @@ -555,7 +554,7 @@ class VnfLcmDriver(abstract_driver.VnfInstanceAbstractDriver): "%(id)s after termination. The vnf is in " "inconsistent state. Error: %(error)s") LOG.error(err_msg % {"id": vnf_instance.id, - "error": six.text_type(exc)}) + "error": str(exc)}) raise exceptions.VnfHealFailed(id=vnf_instance.id, error=encodeutils.exception_to_unicode(exc)) diff --git a/tacker/vnfm/infra_drivers/abstract_driver.py b/tacker/vnfm/infra_drivers/abstract_driver.py index f22dc101f..33ec86369 100644 --- a/tacker/vnfm/infra_drivers/abstract_driver.py +++ b/tacker/vnfm/infra_drivers/abstract_driver.py @@ -16,13 +16,10 @@ import abc -import six - from tacker.api import extensions -@six.add_metaclass(abc.ABCMeta) -class VnfAbstractDriver(extensions.PluginInterface): +class VnfAbstractDriver(extensions.PluginInterface, metaclass=abc.ABCMeta): @abc.abstractmethod def get_type(self): diff --git a/tacker/vnfm/infra_drivers/scale_driver.py b/tacker/vnfm/infra_drivers/scale_driver.py index 78589779a..fb8e7a315 100644 --- a/tacker/vnfm/infra_drivers/scale_driver.py +++ b/tacker/vnfm/infra_drivers/scale_driver.py @@ -15,13 +15,11 @@ import abc -import six - from tacker.api import extensions -@six.add_metaclass(abc.ABCMeta) -class VnfScaleAbstractDriver(extensions.PluginInterface): +class VnfScaleAbstractDriver(extensions.PluginInterface, + metaclass=abc.ABCMeta): @abc.abstractmethod def scale(self, diff --git a/tacker/vnfm/lcm_user_data/abstract_user_data.py b/tacker/vnfm/lcm_user_data/abstract_user_data.py index 5ad114bdc..07aa84452 100644 --- a/tacker/vnfm/lcm_user_data/abstract_user_data.py +++ b/tacker/vnfm/lcm_user_data/abstract_user_data.py @@ -12,13 +12,11 @@ # under the License. import abc -import six from tacker.extensions import vnfm -@six.add_metaclass(abc.ABCMeta) -class AbstractUserData(object): +class AbstractUserData(object, metaclass=abc.ABCMeta): @staticmethod @abc.abstractmethod diff --git a/tacker/vnfm/mgmt_drivers/abstract_driver.py b/tacker/vnfm/mgmt_drivers/abstract_driver.py index 88b9482e5..f4dd7b108 100644 --- a/tacker/vnfm/mgmt_drivers/abstract_driver.py +++ b/tacker/vnfm/mgmt_drivers/abstract_driver.py @@ -16,13 +16,10 @@ import abc -import six - from tacker.api import extensions -@six.add_metaclass(abc.ABCMeta) -class VnfMGMTAbstractDriver(extensions.PluginInterface): +class VnfMGMTAbstractDriver(extensions.PluginInterface, metaclass=abc.ABCMeta): @abc.abstractmethod def get_type(self): diff --git a/tacker/vnfm/monitor_drivers/abstract_driver.py b/tacker/vnfm/monitor_drivers/abstract_driver.py index 118e7d603..6195b9e11 100644 --- a/tacker/vnfm/monitor_drivers/abstract_driver.py +++ b/tacker/vnfm/monitor_drivers/abstract_driver.py @@ -15,13 +15,11 @@ import abc -import six - from tacker.api import extensions -@six.add_metaclass(abc.ABCMeta) -class VNFMonitorAbstractDriver(extensions.PluginInterface): +class VNFMonitorAbstractDriver(extensions.PluginInterface, + metaclass=abc.ABCMeta): @abc.abstractmethod def get_type(self): diff --git a/tacker/vnfm/monitor_drivers/http_ping/http_ping.py b/tacker/vnfm/monitor_drivers/http_ping/http_ping.py index 7403dbbb0..bc448d593 100644 --- a/tacker/vnfm/monitor_drivers/http_ping/http_ping.py +++ b/tacker/vnfm/monitor_drivers/http_ping/http_ping.py @@ -13,11 +13,11 @@ # import netaddr +from urllib import error as urlerr +from urllib import request as urlreq from oslo_config import cfg from oslo_log import log as logging -import six.moves.urllib.error as urlerr -import six.moves.urllib.request as urlreq from tacker._i18n import _ from tacker.common import log diff --git a/tacker/vnfm/plugin.py b/tacker/vnfm/plugin.py index 0f461faf6..0d96c7d8a 100644 --- a/tacker/vnfm/plugin.py +++ b/tacker/vnfm/plugin.py @@ -15,7 +15,6 @@ # under the License. import inspect -import six import yaml import eventlet @@ -336,8 +335,7 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin): LOG.error("VNF Create failed for vnf_id %s", vnf_id) create_failed = True vnf_dict['status'] = constants.ERROR - self.set_vnf_error_status_reason(context, vnf_id, - six.text_type(e)) + self.set_vnf_error_status_reason(context, vnf_id, str(e)) if instance_id is None or create_failed: mgmt_ip_address = None @@ -489,14 +487,13 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin): self._vnf_monitor.delete_hosting_vnf(vnf_dict['id']) self._vnf_maintenance_plugin.post(context, vnf_dict) self.set_vnf_error_status_reason(context, vnf_dict['id'], - six.text_type(e)) + str(e)) except exceptions.MgmtDriverException as e: LOG.error('VNF configuration failed') new_status = constants.ERROR self._vnf_monitor.delete_hosting_vnf(vnf_dict['id']) self._vnf_maintenance_plugin.post(context, vnf_dict) - self.set_vnf_error_status_reason(context, vnf_dict['id'], - six.text_type(e)) + self.set_vnf_error_status_reason(context, vnf_dict['id'], str(e)) del vnf_dict['heal_stack_id'] vnf_dict['status'] = new_status @@ -536,13 +533,12 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin): new_status = constants.ERROR self._vnf_monitor.delete_hosting_vnf(vnf_dict['id']) self.set_vnf_error_status_reason(context, vnf_dict['id'], - six.text_type(e)) + str(e)) except exceptions.MgmtDriverException as e: LOG.error('VNF configuration failed') new_status = constants.ERROR self._vnf_monitor.delete_hosting_vnf(vnf_dict['id']) - self.set_vnf_error_status_reason(context, vnf_dict['id'], - six.text_type(e)) + self.set_vnf_error_status_reason(context, vnf_dict['id'], str(e)) vnf_dict['status'] = new_status self.mgmt_update_post(context, vnf_dict) self._update_vnf_post(context, vnf_dict['id'], new_status, @@ -595,9 +591,8 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin): with excutils.save_and_reraise_exception(): vnf_dict['status'] = constants.ERROR self._vnf_monitor.delete_hosting_vnf(vnf_id) - self.set_vnf_error_status_reason(context, - vnf_dict['id'], - six.text_type(e)) + self.set_vnf_error_status_reason(context, vnf_dict['id'], + str(e)) self.mgmt_update_post(context, vnf_dict) self._update_vnf_post(context, vnf_id, constants.ERROR, @@ -632,9 +627,8 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin): with excutils.save_and_reraise_exception(): vnf_dict['status'] = constants.ERROR self._vnf_monitor.delete_hosting_vnf(vnf_id) - self.set_vnf_error_status_reason(context, - vnf_dict['id'], - six.text_type(e)) + self.set_vnf_error_status_reason(context, vnf_dict['id'], + str(e)) self.mgmt_update_post(context, vnf_dict) self._vnf_maintenance_plugin.post(context, vnf_dict) self._update_vnf_post(context, vnf_id, @@ -665,7 +659,7 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin): except Exception as e_: e = e_ vnf_dict['status'] = constants.ERROR - vnf_dict['error_reason'] = six.text_type(e) + vnf_dict['error_reason'] = str(e) LOG.exception('_delete_vnf_wait') self.set_vnf_error_status_reason(context, vnf_dict['id'], vnf_dict['error_reason']) @@ -708,7 +702,7 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin): with excutils.save_and_reraise_exception(): if not force_delete: vnf_dict['status'] = constants.ERROR - vnf_dict['error_reason'] = six.text_type(e) + vnf_dict['error_reason'] = str(e) self.set_vnf_error_status_reason(context, vnf_dict['id'], vnf_dict['error_reason']) self.mgmt_delete_post(context, vnf_dict) @@ -816,9 +810,7 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin): with excutils.save_and_reraise_exception(): vnf['status'] = constants.ERROR self.set_vnf_error_status_reason( - context, - policy['vnf']['id'], - six.text_type(e)) + context, policy['vnf']['id'], str(e)) _handle_vnf_scaling_post(constants.ERROR) # wait @@ -845,9 +837,7 @@ class VNFMPlugin(vnfm_db.VNFMPluginDb, VNFMMgmtMixin): policy['name']) with excutils.save_and_reraise_exception(): self.set_vnf_error_status_reason( - context, - policy['vnf']['id'], - six.text_type(e)) + context, policy['vnf']['id'], str(e)) _handle_vnf_scaling_post(constants.ERROR) _validate_scaling_policy() diff --git a/tacker/vnfm/policy_actions/abstract_action.py b/tacker/vnfm/policy_actions/abstract_action.py index 43dc58fe8..056c9c1b6 100644 --- a/tacker/vnfm/policy_actions/abstract_action.py +++ b/tacker/vnfm/policy_actions/abstract_action.py @@ -13,11 +13,9 @@ # under the License. import abc -import six -@six.add_metaclass(abc.ABCMeta) -class AbstractPolicyAction(object): +class AbstractPolicyAction(object, metaclass=abc.ABCMeta): @abc.abstractmethod def get_type(self): """Return one of predefined type of the hosting vnf drivers.""" diff --git a/tacker/wsgi.py b/tacker/wsgi.py index cc54fb4f2..7d64f50ea 100644 --- a/tacker/wsgi.py +++ b/tacker/wsgi.py @@ -38,7 +38,6 @@ from oslo_service import systemd from oslo_utils import encodeutils from oslo_utils import excutils import routes.middleware -import six import webob.dec import webob.exc @@ -466,7 +465,7 @@ class JSONDictSerializer(DictSerializer): def default(self, data): def sanitizer(obj): - return six.text_type(obj) + return str(obj) return encode_body(jsonutils.dump_as_bytes(data, default=sanitizer)) @@ -955,26 +954,17 @@ class ResponseObject(object): response = webob.Response(body=body) response.status_int = self.code for hdr, val in self._headers.items(): - if six.PY2: - # In Py2.X Headers must be a UTF-8 encode str. - response.headers[hdr] = encodeutils.safe_encode(val) - else: - # In Py3.X Headers must be a str that was first safely - # encoded to UTF-8 (to catch any bad encodings) and then - # decoded back to a native str. - response.headers[hdr] = encodeutils.safe_decode( - encodeutils.safe_encode(val)) + # Headers must be a str that was first safely + # encoded to UTF-8 (to catch any bad encodings) and then + # decoded back to a native str. + response.headers[hdr] = encodeutils.safe_decode( + encodeutils.safe_encode(val)) # Deal with content_type - if not isinstance(content_type, six.text_type): - content_type = six.text_type(content_type) - if six.PY2: - # In Py2.X Headers must be a UTF-8 encode str. - response.headers['Content-Type'] = encodeutils.safe_encode( - content_type) - else: - # In Py3.X Headers must be a str. - response.headers['Content-Type'] = encodeutils.safe_decode( - encodeutils.safe_encode(content_type)) + if not isinstance(content_type, str): + content_type = str(content_type) + + response.headers['Content-Type'] = encodeutils.safe_decode( + encodeutils.safe_encode(content_type)) return response @property @@ -1140,7 +1130,7 @@ class Fault(webob.exc.HTTPException): self.wrapped_exc.charset = 'UTF-8' body = JSONDictSerializer().serialize(fault_data) - if isinstance(body, six.text_type): + if isinstance(body, str): body = body.encode('utf-8') self.wrapped_exc.body = body