From 08a60f7483de7a38eb6ffc92ac0f63dd82981ff2 Mon Sep 17 00:00:00 2001 From: Brian Haley Date: Thu, 21 May 2020 14:41:18 -0400 Subject: [PATCH] Remove usage of six.add_metaclass With python 3.x, classes can use the metaclass= logic to not require usage of the six library. One step in removing all of six usage from neutron. Change-Id: I2f815e412d9a96eb5faf2b3bb3a1e393a9db9309 --- neutron/agent/firewall.py | 5 +---- neutron/agent/l2/extensions/qos.py | 4 +--- neutron/agent/l3/router_info.py | 4 +--- neutron/agent/linux/dhcp.py | 6 ++---- neutron/agent/linux/external_process.py | 4 +--- neutron/agent/linux/interface.py | 4 +--- neutron/agent/linux/pd_driver.py | 5 +---- neutron/api/rpc/callbacks/resource_manager.py | 4 +--- neutron/cmd/upgrade_checks/base.py | 5 +---- neutron/core_extensions/base.py | 5 +---- neutron/extensions/address_scope.py | 4 +--- neutron/extensions/agent.py | 4 +--- neutron/extensions/availability_zone.py | 4 +--- neutron/extensions/dhcpagentscheduler.py | 4 +--- neutron/extensions/dvr.py | 4 +--- neutron/extensions/floating_ip_port_forwarding.py | 5 ++--- neutron/extensions/floatingip_pools.py | 4 +--- neutron/extensions/l3.py | 4 +--- neutron/extensions/l3_conntrack_helper.py | 5 ++--- neutron/extensions/l3agentscheduler.py | 4 +--- neutron/extensions/logging.py | 4 +--- neutron/extensions/metering.py | 5 ++--- neutron/extensions/network_availability_zone.py | 4 +--- neutron/extensions/network_segment_range.py | 5 ++--- neutron/extensions/qos.py | 4 +--- neutron/extensions/router_availability_zone.py | 4 +--- neutron/extensions/securitygroup.py | 3 +-- neutron/extensions/segment.py | 4 +--- neutron/extensions/tagging.py | 4 +--- neutron/ipam/driver.py | 10 +++------- neutron/ipam/requests.py | 10 +++------- neutron/manager.py | 7 ++----- neutron/neutron_plugin_base_v2.py | 4 +--- neutron/objects/base.py | 7 +++---- neutron/objects/qos/rule.py | 4 +--- neutron/objects/rbac.py | 4 +--- neutron/objects/rbac_db.py | 5 ++--- .../plugins/ml2/drivers/agent/_agent_manager_base.py | 8 ++------ .../ml2/drivers/l2pop/rpc_manager/l2population_rpc.py | 8 +++----- neutron/plugins/ml2/drivers/mech_agent.py | 8 +++----- .../plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py | 7 ++----- .../ml2/drivers/ovn/mech_driver/ovsdb/ovn_db_sync.py | 4 +--- neutron/plugins/ml2/drivers/type_tunnel.py | 10 +++------- neutron/scheduler/base_resource_filter.py | 4 +--- neutron/scheduler/base_scheduler.py | 4 +--- neutron/scheduler/l3_agent_scheduler.py | 4 +--- neutron/scheduler/l3_ovn_scheduler.py | 4 +--- neutron/services/externaldns/driver.py | 4 +--- neutron/services/logapi/agent/log_extension.py | 4 +--- neutron/services/metering/drivers/abstract_driver.py | 5 +---- neutron/tests/base.py | 3 +-- neutron/tests/common/net_helpers.py | 4 +--- neutron/tests/unit/extensions/foxinsocks.py | 4 +--- 53 files changed, 74 insertions(+), 187 deletions(-) diff --git a/neutron/agent/firewall.py b/neutron/agent/firewall.py index 4a54c6a2399..f8f66154a46 100644 --- a/neutron/agent/firewall.py +++ b/neutron/agent/firewall.py @@ -16,8 +16,6 @@ import abc import contextlib -import six - from neutron_lib.api.definitions import port_security as psec from neutron_lib import constants as n_const from neutron_lib.utils import runtime @@ -49,8 +47,7 @@ def load_firewall_driver_class(driver): 'neutron.agent.firewall_drivers', driver) -@six.add_metaclass(abc.ABCMeta) -class FirewallDriver(object): +class FirewallDriver(object, metaclass=abc.ABCMeta): """Firewall Driver base class. Defines methods that any driver providing security groups diff --git a/neutron/agent/l2/extensions/qos.py b/neutron/agent/l2/extensions/qos.py index 4a4b1844965..dac32756a93 100644 --- a/neutron/agent/l2/extensions/qos.py +++ b/neutron/agent/l2/extensions/qos.py @@ -21,7 +21,6 @@ from neutron_lib import constants from neutron_lib.services.qos import constants as qos_consts from oslo_concurrency import lockutils from oslo_log import log as logging -import six from neutron.api.rpc.callbacks.consumer import registry from neutron.api.rpc.callbacks import events @@ -32,8 +31,7 @@ from neutron import manager LOG = logging.getLogger(__name__) -@six.add_metaclass(abc.ABCMeta) -class QosAgentDriver(object): +class QosAgentDriver(object, metaclass=abc.ABCMeta): """Defines stable abstract interface for QoS Agent Driver. QoS Agent driver defines the interface to be implemented by Agent diff --git a/neutron/agent/l3/router_info.py b/neutron/agent/l3/router_info.py index 2e23e85229b..96f219095f3 100644 --- a/neutron/agent/l3/router_info.py +++ b/neutron/agent/l3/router_info.py @@ -20,7 +20,6 @@ from neutron_lib import constants as lib_constants from neutron_lib.exceptions import l3 as l3_exc from neutron_lib.utils import helpers from oslo_log import log as logging -import six from neutron._i18n import _ from neutron.agent.l3 import namespaces @@ -42,8 +41,7 @@ ADDRESS_SCOPE_MARK_ID_MAX = 2048 DEFAULT_ADDRESS_SCOPE = "noscope" -@six.add_metaclass(abc.ABCMeta) -class BaseRouterInfo(object): +class BaseRouterInfo(object, metaclass=abc.ABCMeta): def __init__(self, agent, diff --git a/neutron/agent/linux/dhcp.py b/neutron/agent/linux/dhcp.py index 88af95d9b07..ad6d5b10909 100644 --- a/neutron/agent/linux/dhcp.py +++ b/neutron/agent/linux/dhcp.py @@ -161,8 +161,7 @@ class NetModel(DictModel): return self._ns_name -@six.add_metaclass(abc.ABCMeta) -class DhcpBase(object): +class DhcpBase(object, metaclass=abc.ABCMeta): def __init__(self, conf, network, process_monitor, version=None, plugin=None): @@ -216,8 +215,7 @@ class DhcpBase(object): raise NotImplementedError() -@six.add_metaclass(abc.ABCMeta) -class DhcpLocalProcess(DhcpBase): +class DhcpLocalProcess(DhcpBase, metaclass=abc.ABCMeta): PORTS = [] def __init__(self, conf, network, process_monitor, version=None, diff --git a/neutron/agent/linux/external_process.py b/neutron/agent/linux/external_process.py index f5bc1f89b0a..19beef53de0 100644 --- a/neutron/agent/linux/external_process.py +++ b/neutron/agent/linux/external_process.py @@ -22,7 +22,6 @@ from oslo_config import cfg from oslo_log import log as logging from oslo_utils import fileutils import psutil -import six from neutron.agent.linux import ip_lib from neutron.agent.linux import utils @@ -37,8 +36,7 @@ agent_cfg.register_external_process_opts() agent_cfg.register_process_monitor_opts(cfg.CONF) -@six.add_metaclass(abc.ABCMeta) -class MonitoredProcess(object): +class MonitoredProcess(object, metaclass=abc.ABCMeta): @abc.abstractproperty def active(self): """Boolean representing the running state of the process.""" diff --git a/neutron/agent/linux/interface.py b/neutron/agent/linux/interface.py index e8b6653c708..0d151bd6607 100644 --- a/neutron/agent/linux/interface.py +++ b/neutron/agent/linux/interface.py @@ -22,7 +22,6 @@ from neutron_lib import exceptions from oslo_log import log as logging from oslo_utils import excutils from pyroute2.netlink import exceptions as pyroute2_exc -import six from neutron.agent.common import ovs_lib from neutron.agent.linux import ip_lib @@ -36,8 +35,7 @@ def _get_veth(name1, name2, namespace2): ip_lib.IPDevice(name2, namespace=namespace2)) -@six.add_metaclass(abc.ABCMeta) -class LinuxInterfaceDriver(object): +class LinuxInterfaceDriver(object, metaclass=abc.ABCMeta): DEV_NAME_LEN = constants.LINUX_DEV_LEN DEV_NAME_PREFIX = constants.TAP_DEVICE_PREFIX diff --git a/neutron/agent/linux/pd_driver.py b/neutron/agent/linux/pd_driver.py index 33b1bc45431..6409f9398e2 100644 --- a/neutron/agent/linux/pd_driver.py +++ b/neutron/agent/linux/pd_driver.py @@ -15,15 +15,12 @@ import abc -import six - from neutron.conf.agent import common as agent_conf agent_conf.register_pddriver_opts() -@six.add_metaclass(abc.ABCMeta) -class PDDriverBase(object): +class PDDriverBase(object, metaclass=abc.ABCMeta): def __init__(self, router_id, subnet_id, ri_ifname): self.router_id = router_id diff --git a/neutron/api/rpc/callbacks/resource_manager.py b/neutron/api/rpc/callbacks/resource_manager.py index 5921e7cb006..37d394c919c 100644 --- a/neutron/api/rpc/callbacks/resource_manager.py +++ b/neutron/api/rpc/callbacks/resource_manager.py @@ -15,7 +15,6 @@ import collections from neutron_lib.callbacks import exceptions from oslo_log import log as logging -import six from neutron.api.rpc.callbacks import exceptions as rpc_exc from neutron.api.rpc.callbacks import resources @@ -31,8 +30,7 @@ def _validate_resource_type(resource_type): raise exceptions.Invalid(element='resource', value=resource_type) -@six.add_metaclass(abc.ABCMeta) -class ResourceCallbacksManager(object): +class ResourceCallbacksManager(object, metaclass=abc.ABCMeta): """A callback system that allows information providers in a loose manner. """ diff --git a/neutron/cmd/upgrade_checks/base.py b/neutron/cmd/upgrade_checks/base.py index 4263044de86..fdcdd1ff8c9 100644 --- a/neutron/cmd/upgrade_checks/base.py +++ b/neutron/cmd/upgrade_checks/base.py @@ -14,11 +14,8 @@ import abc -import six - -@six.add_metaclass(abc.ABCMeta) -class BaseChecks(object): +class BaseChecks(object, metaclass=abc.ABCMeta): """Base class providing upgrade checks. diff --git a/neutron/core_extensions/base.py b/neutron/core_extensions/base.py index 1545685f663..5f77940c357 100644 --- a/neutron/core_extensions/base.py +++ b/neutron/core_extensions/base.py @@ -15,8 +15,6 @@ import abc -import six - NETWORK = 'network' PORT = 'port' @@ -27,8 +25,7 @@ EVENT_UPDATE = 'update' CORE_RESOURCES = [NETWORK, PORT] -@six.add_metaclass(abc.ABCMeta) -class CoreResourceExtension(object): +class CoreResourceExtension(object, metaclass=abc.ABCMeta): @abc.abstractmethod def process_fields(self, context, resource_type, event_type, diff --git a/neutron/extensions/address_scope.py b/neutron/extensions/address_scope.py index ceb7f5c62bb..89db4d740b5 100644 --- a/neutron/extensions/address_scope.py +++ b/neutron/extensions/address_scope.py @@ -17,7 +17,6 @@ import abc from neutron_lib.api.definitions import address_scope as apidef from neutron_lib.api import extensions as api_extensions from neutron_lib.plugins import directory -import six from neutron.api import extensions from neutron.api.v2 import base @@ -45,8 +44,7 @@ class Address_scope(api_extensions.APIExtensionDescriptor): return [ex] -@six.add_metaclass(abc.ABCMeta) -class AddressScopePluginBase(object): +class AddressScopePluginBase(object, metaclass=abc.ABCMeta): @abc.abstractmethod def create_address_scope(self, context, address_scope): diff --git a/neutron/extensions/agent.py b/neutron/extensions/agent.py index 31e33940901..99f79a9ca3c 100644 --- a/neutron/extensions/agent.py +++ b/neutron/extensions/agent.py @@ -19,7 +19,6 @@ from neutron_lib.api.definitions import agent as apidef from neutron_lib.api import extensions as api_extensions from neutron_lib import exceptions from neutron_lib.plugins import directory -import six from neutron.api import extensions from neutron.api.v2 import base @@ -45,8 +44,7 @@ class Agent(api_extensions.APIExtensionDescriptor): return [ex] -@six.add_metaclass(abc.ABCMeta) -class AgentPluginBase(object): +class AgentPluginBase(object, metaclass=abc.ABCMeta): """REST API to operate the Agent. All of method must be in an admin context. diff --git a/neutron/extensions/availability_zone.py b/neutron/extensions/availability_zone.py index db681537323..12931ab3fbe 100644 --- a/neutron/extensions/availability_zone.py +++ b/neutron/extensions/availability_zone.py @@ -17,7 +17,6 @@ import abc from neutron_lib.api.definitions import availability_zone as az_def from neutron_lib.api import extensions as api_extensions from neutron_lib.plugins import directory -import six from neutron.api import extensions from neutron.api.v2 import base @@ -40,8 +39,7 @@ class Availability_zone(api_extensions.APIExtensionDescriptor): return [ex] -@six.add_metaclass(abc.ABCMeta) -class AvailabilityZonePluginBase(object): +class AvailabilityZonePluginBase(object, metaclass=abc.ABCMeta): """REST API to operate the Availability Zone.""" @abc.abstractmethod diff --git a/neutron/extensions/dhcpagentscheduler.py b/neutron/extensions/dhcpagentscheduler.py index e1c95b32a60..e84b42502a0 100644 --- a/neutron/extensions/dhcpagentscheduler.py +++ b/neutron/extensions/dhcpagentscheduler.py @@ -22,7 +22,6 @@ from neutron_lib.api import extensions as api_extensions from neutron_lib.api import faults from neutron_lib.plugins import directory from neutron_lib import rpc as n_rpc -import six from neutron.api import extensions from neutron.api.v2 import resource @@ -100,8 +99,7 @@ class Dhcpagentscheduler(api_extensions.APIExtensionDescriptor): return exts -@six.add_metaclass(abc.ABCMeta) -class DhcpAgentSchedulerPluginBase(object): +class DhcpAgentSchedulerPluginBase(object, metaclass=abc.ABCMeta): """REST API to operate the DHCP agent scheduler. All of method must be in an admin context. diff --git a/neutron/extensions/dvr.py b/neutron/extensions/dvr.py index 8aa658abdd5..7c9629975b9 100644 --- a/neutron/extensions/dvr.py +++ b/neutron/extensions/dvr.py @@ -16,7 +16,6 @@ import abc from neutron_lib.api.definitions import dvr as apidef from neutron_lib.api import extensions -import six class Dvr(extensions.APIExtensionDescriptor): @@ -25,8 +24,7 @@ class Dvr(extensions.APIExtensionDescriptor): api_definition = apidef -@six.add_metaclass(abc.ABCMeta) -class DVRMacAddressPluginBase(object): +class DVRMacAddressPluginBase(object, metaclass=abc.ABCMeta): @abc.abstractmethod def get_dvr_mac_address_list(self, context): diff --git a/neutron/extensions/floating_ip_port_forwarding.py b/neutron/extensions/floating_ip_port_forwarding.py index 44d1d3da689..c46f562f480 100644 --- a/neutron/extensions/floating_ip_port_forwarding.py +++ b/neutron/extensions/floating_ip_port_forwarding.py @@ -21,7 +21,6 @@ from neutron_lib.api import extensions as api_extensions from neutron_lib.plugins import constants as plugin_consts from neutron_lib.plugins import directory from neutron_lib.services import base as service_base -import six from neutron.api import extensions from neutron.api.v2 import base @@ -77,8 +76,8 @@ class Floating_ip_port_forwarding(api_extensions.APIExtensionDescriptor): return resources -@six.add_metaclass(abc.ABCMeta) -class PortForwardingPluginBase(service_base.ServicePluginBase): +class PortForwardingPluginBase(service_base.ServicePluginBase, + metaclass=abc.ABCMeta): path_prefix = apidef.API_PREFIX diff --git a/neutron/extensions/floatingip_pools.py b/neutron/extensions/floatingip_pools.py index 6c965ee2ce4..337c83c2aa3 100644 --- a/neutron/extensions/floatingip_pools.py +++ b/neutron/extensions/floatingip_pools.py @@ -16,7 +16,6 @@ import itertools from neutron_lib.api.definitions import floatingip_pools as apidef from neutron_lib.api import extensions as api_extensions from neutron_lib.plugins import constants -import six from neutron.api.v2 import resource_helper @@ -42,8 +41,7 @@ class Floatingip_pools(api_extensions.APIExtensionDescriptor): return resources -@six.add_metaclass(abc.ABCMeta) -class FloatingIPPoolPluginBase(object): +class FloatingIPPoolPluginBase(object, metaclass=abc.ABCMeta): @abc.abstractmethod def get_floatingip_pools(self, context, filters=None, fields=None, diff --git a/neutron/extensions/l3.py b/neutron/extensions/l3.py index 4cbc3594a37..8d60ca19196 100644 --- a/neutron/extensions/l3.py +++ b/neutron/extensions/l3.py @@ -18,7 +18,6 @@ import abc from neutron_lib.api.definitions import l3 as l3_apidef from neutron_lib.api import extensions from neutron_lib.plugins import constants -import six from neutron.api.v2 import resource_helper from neutron.conf import quota @@ -42,8 +41,7 @@ class L3(extensions.APIExtensionDescriptor): register_quota=True) -@six.add_metaclass(abc.ABCMeta) -class RouterPluginBase(object): +class RouterPluginBase(object, metaclass=abc.ABCMeta): @abc.abstractmethod def create_router(self, context, router): diff --git a/neutron/extensions/l3_conntrack_helper.py b/neutron/extensions/l3_conntrack_helper.py index 799a4d9ce6d..bd6319ef631 100644 --- a/neutron/extensions/l3_conntrack_helper.py +++ b/neutron/extensions/l3_conntrack_helper.py @@ -21,7 +21,6 @@ from neutron_lib.api import extensions as api_extensions from neutron_lib.plugins import constants as plugin_consts from neutron_lib.plugins import directory from neutron_lib.services import base as service_base -import six from neutron.api import extensions from neutron.api.v2 import base @@ -81,8 +80,8 @@ class L3_conntrack_helper(api_extensions.APIExtensionDescriptor): return resources -@six.add_metaclass(abc.ABCMeta) -class ConntrackHelperPluginBase(service_base.ServicePluginBase): +class ConntrackHelperPluginBase(service_base.ServicePluginBase, + metaclass=abc.ABCMeta): path_prefix = apidef.API_PREFIX diff --git a/neutron/extensions/l3agentscheduler.py b/neutron/extensions/l3agentscheduler.py index 980486f23a9..fdc29f7cb40 100644 --- a/neutron/extensions/l3agentscheduler.py +++ b/neutron/extensions/l3agentscheduler.py @@ -24,7 +24,6 @@ from neutron_lib.plugins import constants as plugin_constants from neutron_lib.plugins import directory from neutron_lib import rpc as n_rpc from oslo_log import log as logging -import six import webob.exc from neutron._i18n import _ @@ -187,8 +186,7 @@ class RouterDoesntSupportScheduling(exceptions.Conflict): message = _("Router %(router_id)s does not support agent scheduling.") -@six.add_metaclass(abc.ABCMeta) -class L3AgentSchedulerPluginBase(object): +class L3AgentSchedulerPluginBase(object, metaclass=abc.ABCMeta): """REST API to operate the l3 agent scheduler. All of method must be in an admin context. diff --git a/neutron/extensions/logging.py b/neutron/extensions/logging.py index 0cba2fca228..249b0a2e29b 100644 --- a/neutron/extensions/logging.py +++ b/neutron/extensions/logging.py @@ -20,7 +20,6 @@ from neutron_lib.api.definitions import logging as apidef from neutron_lib.api import extensions as api_extensions from neutron_lib.plugins import constants as plugin_const from neutron_lib.services import base as service_base -import six from neutron.api.v2 import resource_helper @@ -50,8 +49,7 @@ class Logging(api_extensions.APIExtensionDescriptor): return resources -@six.add_metaclass(abc.ABCMeta) -class LoggingPluginBase(service_base.ServicePluginBase): +class LoggingPluginBase(service_base.ServicePluginBase, metaclass=abc.ABCMeta): path_prefix = apidef.API_PREFIX diff --git a/neutron/extensions/metering.py b/neutron/extensions/metering.py index 89fdd273214..7b6bab2bbfe 100644 --- a/neutron/extensions/metering.py +++ b/neutron/extensions/metering.py @@ -18,7 +18,6 @@ from neutron_lib.api.definitions import metering as metering_apidef from neutron_lib.api import extensions from neutron_lib.plugins import constants from neutron_lib.services import base as service_base -import six from neutron.api.v2 import resource_helper @@ -42,8 +41,8 @@ class Metering(extensions.APIExtensionDescriptor): constants.METERING, translate_name=True, allow_bulk=True) -@six.add_metaclass(abc.ABCMeta) -class MeteringPluginBase(service_base.ServicePluginBase): +class MeteringPluginBase(service_base.ServicePluginBase, + metaclass=abc.ABCMeta): def get_plugin_description(self): return constants.METERING diff --git a/neutron/extensions/network_availability_zone.py b/neutron/extensions/network_availability_zone.py index 111eb3a44f5..bf436009271 100644 --- a/neutron/extensions/network_availability_zone.py +++ b/neutron/extensions/network_availability_zone.py @@ -16,7 +16,6 @@ import abc from neutron_lib.api.definitions import network_availability_zone as apidef from neutron_lib.api import extensions -import six class Network_availability_zone(extensions.APIExtensionDescriptor): @@ -25,8 +24,7 @@ class Network_availability_zone(extensions.APIExtensionDescriptor): api_definition = apidef -@six.add_metaclass(abc.ABCMeta) -class NetworkAvailabilityZonePluginBase(object): +class NetworkAvailabilityZonePluginBase(object, metaclass=abc.ABCMeta): @abc.abstractmethod def get_network_availability_zones(self, network): diff --git a/neutron/extensions/network_segment_range.py b/neutron/extensions/network_segment_range.py index ebb9956bda5..02e10a1cda8 100644 --- a/neutron/extensions/network_segment_range.py +++ b/neutron/extensions/network_segment_range.py @@ -20,7 +20,6 @@ from neutron_lib.plugins import constants as plugin_constants from neutron_lib.plugins import directory from neutron_lib.services import base as service_base from oslo_log import log as logging -import six from neutron.api import extensions from neutron.api.v2 import base @@ -63,8 +62,8 @@ class Network_segment_range(api_extensions.APIExtensionDescriptor): return NetworkSegmentRangePluginBase -@six.add_metaclass(abc.ABCMeta) -class NetworkSegmentRangePluginBase(service_base.ServicePluginBase): +class NetworkSegmentRangePluginBase(service_base.ServicePluginBase, + metaclass=abc.ABCMeta): """REST API to manage network segment ranges. All methods must be in an admin context. diff --git a/neutron/extensions/qos.py b/neutron/extensions/qos.py index 78675661252..7764f6615d7 100644 --- a/neutron/extensions/qos.py +++ b/neutron/extensions/qos.py @@ -22,7 +22,6 @@ from neutron_lib.api import extensions as api_extensions from neutron_lib.plugins import constants from neutron_lib.plugins import directory from neutron_lib.services import base as service_base -import six from neutron.api import extensions from neutron.api.v2 import base @@ -80,8 +79,7 @@ class Qos(api_extensions.APIExtensionDescriptor): return resources -@six.add_metaclass(abc.ABCMeta) -class QoSPluginBase(service_base.ServicePluginBase): +class QoSPluginBase(service_base.ServicePluginBase, metaclass=abc.ABCMeta): path_prefix = apidef.API_PREFIX diff --git a/neutron/extensions/router_availability_zone.py b/neutron/extensions/router_availability_zone.py index 4832941be9e..f066ddf55ed 100644 --- a/neutron/extensions/router_availability_zone.py +++ b/neutron/extensions/router_availability_zone.py @@ -16,7 +16,6 @@ import abc from neutron_lib.api.definitions import router_availability_zone as apidef from neutron_lib.api import extensions -import six class Router_availability_zone(extensions.APIExtensionDescriptor): @@ -25,8 +24,7 @@ class Router_availability_zone(extensions.APIExtensionDescriptor): api_definition = apidef -@six.add_metaclass(abc.ABCMeta) -class RouterAvailabilityZonePluginBase(object): +class RouterAvailabilityZonePluginBase(object, metaclass=abc.ABCMeta): @abc.abstractmethod def get_router_availability_zones(self, router): diff --git a/neutron/extensions/securitygroup.py b/neutron/extensions/securitygroup.py index 65f98c795c2..36896a1f12d 100644 --- a/neutron/extensions/securitygroup.py +++ b/neutron/extensions/securitygroup.py @@ -355,8 +355,7 @@ class Securitygroup(api_extensions.ExtensionDescriptor): return [stdattr_ext.Standardattrdescription.get_alias()] -@six.add_metaclass(abc.ABCMeta) -class SecurityGroupPluginBase(object): +class SecurityGroupPluginBase(object, metaclass=abc.ABCMeta): @abc.abstractmethod def create_security_group(self, context, security_group): diff --git a/neutron/extensions/segment.py b/neutron/extensions/segment.py index e023341a0c2..dbc3b462141 100644 --- a/neutron/extensions/segment.py +++ b/neutron/extensions/segment.py @@ -21,7 +21,6 @@ from neutron_lib.api import extensions as api_extensions from neutron_lib import constants from neutron_lib.db import constants as db_const from neutron_lib.plugins import directory -import six from neutron.api import extensions from neutron.api.v2 import base @@ -149,8 +148,7 @@ class Segment(api_extensions.ExtensionDescriptor): stdattrseg_apidef.ALIAS] -@six.add_metaclass(abc.ABCMeta) -class SegmentPluginBase(object): +class SegmentPluginBase(object, metaclass=abc.ABCMeta): @abc.abstractmethod def create_segment(self, context, segment): diff --git a/neutron/extensions/tagging.py b/neutron/extensions/tagging.py index 21e690c6e49..57806ba0250 100644 --- a/neutron/extensions/tagging.py +++ b/neutron/extensions/tagging.py @@ -22,7 +22,6 @@ from neutron_lib import exceptions from neutron_lib.plugins import directory from neutron_lib import rpc as n_rpc from neutron_lib.services import base as service_base -import six import webob.exc from neutron._i18n import _ @@ -226,8 +225,7 @@ class Tagging(api_extensions.ExtensionDescriptor): return EXTENDED_ATTRIBUTES_2_0 -@six.add_metaclass(abc.ABCMeta) -class TagPluginBase(service_base.ServicePluginBase): +class TagPluginBase(service_base.ServicePluginBase, metaclass=abc.ABCMeta): """REST API to operate the Tag.""" def get_plugin_description(self): diff --git a/neutron/ipam/driver.py b/neutron/ipam/driver.py index 77ba0e91931..b3be0dfa245 100644 --- a/neutron/ipam/driver.py +++ b/neutron/ipam/driver.py @@ -13,14 +13,12 @@ import abc from oslo_config import cfg -import six from neutron.ipam import requests as ipam_req from neutron import manager -@six.add_metaclass(abc.ABCMeta) -class Pool(object): +class Pool(object, metaclass=abc.ABCMeta): """Interface definition for an IPAM driver. There should be an instance of the driver for every subnet pool. @@ -128,8 +126,7 @@ class Pool(object): return True -@six.add_metaclass(abc.ABCMeta) -class Subnet(object): +class Subnet(object, metaclass=abc.ABCMeta): """Interface definition for an IPAM subnet A subnet would typically be associated with a network but may not be. It @@ -167,8 +164,7 @@ class Subnet(object): """ -@six.add_metaclass(abc.ABCMeta) -class SubnetGroup(object): +class SubnetGroup(object, metaclass=abc.ABCMeta): """Interface definition for a filtered group of IPAM Subnets Allocates from a group of semantically equivalent subnets. The list of diff --git a/neutron/ipam/requests.py b/neutron/ipam/requests.py index a65b19ce260..1a4fcf1967e 100644 --- a/neutron/ipam/requests.py +++ b/neutron/ipam/requests.py @@ -17,20 +17,17 @@ from neutron_lib.api import validators from neutron_lib import constants from oslo_utils import netutils from oslo_utils import uuidutils -import six from neutron._i18n import _ from neutron.common import utils as common_utils from neutron.ipam import exceptions as ipam_exc -@six.add_metaclass(abc.ABCMeta) -class SubnetPool(object): +class SubnetPool(object, metaclass=abc.ABCMeta): """Represents a pool of IPs available inside an address scope.""" -@six.add_metaclass(abc.ABCMeta) -class SubnetRequest(object): +class SubnetRequest(object, metaclass=abc.ABCMeta): """Carries the data needed to make a subnet request The data validated and carried by an instance of this class is the data @@ -184,8 +181,7 @@ class SpecificSubnetRequest(SubnetRequest): return self._subnet_cidr.prefixlen -@six.add_metaclass(abc.ABCMeta) -class AddressRequest(object): +class AddressRequest(object, metaclass=abc.ABCMeta): """Abstract base class for address requests""" diff --git a/neutron/manager.py b/neutron/manager.py index 15df5f0bfec..4e22528615c 100644 --- a/neutron/manager.py +++ b/neutron/manager.py @@ -24,7 +24,6 @@ import oslo_messaging from oslo_service import periodic_task from oslo_utils import excutils from osprofiler import profiler -import six from neutron._i18n import _ from neutron.common import utils @@ -40,8 +39,7 @@ class ManagerMeta(profiler.TracedMeta, type(periodic_task.PeriodicTasks)): pass -@six.add_metaclass(ManagerMeta) -class Manager(periodic_task.PeriodicTasks): +class Manager(periodic_task.PeriodicTasks, metaclass=ManagerMeta): __trace_args__ = {"name": "rpc"} # Set RPC API version to 1.0 by default. @@ -91,8 +89,7 @@ def validate_pre_plugin_load(): return msg -@six.add_metaclass(profiler.TracedMeta) -class NeutronManager(object): +class NeutronManager(object, metaclass=profiler.TracedMeta): """Neutron's Manager class. Neutron's Manager class is responsible for parsing a config file and diff --git a/neutron/neutron_plugin_base_v2.py b/neutron/neutron_plugin_base_v2.py index 6afce91d031..9ebcd18ef16 100644 --- a/neutron/neutron_plugin_base_v2.py +++ b/neutron/neutron_plugin_base_v2.py @@ -23,11 +23,9 @@ methods that needs to be implemented by a v2 Neutron Plug-in. import abc from neutron_lib.services import base as base_services -import six -@six.add_metaclass(abc.ABCMeta) -class NeutronPluginBaseV2(base_services.WorkerBase): +class NeutronPluginBaseV2(base_services.WorkerBase, metaclass=abc.ABCMeta): @abc.abstractmethod def create_subnet(self, context, subnet): diff --git a/neutron/objects/base.py b/neutron/objects/base.py index 9dd0138dcfe..57c1d3e3089 100644 --- a/neutron/objects/base.py +++ b/neutron/objects/base.py @@ -142,10 +142,10 @@ class NeutronObjectRegistry(obj_base.VersionedObjectRegistry): return self -@six.add_metaclass(abc.ABCMeta) class NeutronObject(obj_base.VersionedObject, obj_base.VersionedObjectDictCompat, - obj_base.ComparableVersionedObject): + obj_base.ComparableVersionedObject, + metaclass=abc.ABCMeta): synthetic_fields = [] extra_filter_names = set() @@ -398,8 +398,7 @@ class DeclarativeObject(abc.ABCMeta): raise o_exc.NeutronObjectValidatorException(fields=invalid_fields) -@six.add_metaclass(DeclarativeObject) -class NeutronDbObject(NeutronObject): +class NeutronDbObject(NeutronObject, metaclass=DeclarativeObject): # should be overridden for all persistent objects db_model = None diff --git a/neutron/objects/qos/rule.py b/neutron/objects/qos/rule.py index efb81c4363e..e327037677d 100644 --- a/neutron/objects/qos/rule.py +++ b/neutron/objects/qos/rule.py @@ -23,7 +23,6 @@ from neutron_lib.utils import helpers from oslo_utils import versionutils from oslo_versionedobjects import exception from oslo_versionedobjects import fields as obj_fields -import six from neutron.db.qos import models as qos_db_model from neutron.objects import base @@ -43,8 +42,7 @@ def get_rules(obj_cls, context, qos_policy_id): return all_rules -@six.add_metaclass(abc.ABCMeta) -class QosRule(base.NeutronDbObject): +class QosRule(base.NeutronDbObject, metaclass=abc.ABCMeta): # Version 1.0: Initial version, only BandwidthLimitRule # 1.1: Added DscpMarkingRule # 1.2: Added QosMinimumBandwidthRule diff --git a/neutron/objects/rbac.py b/neutron/objects/rbac.py index 9e3db8e01ec..15e823356aa 100644 --- a/neutron/objects/rbac.py +++ b/neutron/objects/rbac.py @@ -17,14 +17,12 @@ import abc from neutron_lib.objects import common_types from oslo_versionedobjects import fields as obj_fields -from six import add_metaclass from sqlalchemy import and_ from neutron.objects import base -@add_metaclass(abc.ABCMeta) -class RBACBaseObject(base.NeutronDbObject): +class RBACBaseObject(base.NeutronDbObject, metaclass=abc.ABCMeta): # Version 1.0: Initial version VERSION = '1.0' diff --git a/neutron/objects/rbac_db.py b/neutron/objects/rbac_db.py index c68173dc116..3152fbdc85a 100644 --- a/neutron/objects/rbac_db.py +++ b/neutron/objects/rbac_db.py @@ -19,7 +19,6 @@ from neutron_lib.callbacks import events from neutron_lib.callbacks import registry from neutron_lib.callbacks import resources from neutron_lib import exceptions -from six import add_metaclass from six import with_metaclass from sqlalchemy import and_ @@ -32,9 +31,9 @@ from neutron.objects import base from neutron.objects.db import api as obj_db_api -@add_metaclass(abc.ABCMeta) class RbacNeutronDbObjectMixin(rbac_db_mixin.RbacPluginMixin, - base.NeutronDbObject): + base.NeutronDbObject, + metaclass=abc.ABCMeta): rbac_db_cls = None diff --git a/neutron/plugins/ml2/drivers/agent/_agent_manager_base.py b/neutron/plugins/ml2/drivers/agent/_agent_manager_base.py index d23d4c6b9a3..7a312ba5780 100644 --- a/neutron/plugins/ml2/drivers/agent/_agent_manager_base.py +++ b/neutron/plugins/ml2/drivers/agent/_agent_manager_base.py @@ -16,8 +16,6 @@ import abc -import six - class NetworkSegment(object): """Represents a Neutron network segment""" @@ -29,8 +27,7 @@ class NetworkSegment(object): self.mtu = mtu -@six.add_metaclass(abc.ABCMeta) -class CommonAgentManagerRpcCallBackBase(object): +class CommonAgentManagerRpcCallBackBase(object, metaclass=abc.ABCMeta): """Base class for managers RPC callbacks. This class must be inherited by a RPC callback class that is used @@ -81,8 +78,7 @@ class CommonAgentManagerRpcCallBackBase(object): return updated_devices -@six.add_metaclass(abc.ABCMeta) -class CommonAgentManagerBase(object): +class CommonAgentManagerBase(object, metaclass=abc.ABCMeta): """Base class for managers that are used with the common agent loop. This class must be inherited by a manager class that is used diff --git a/neutron/plugins/ml2/drivers/l2pop/rpc_manager/l2population_rpc.py b/neutron/plugins/ml2/drivers/l2pop/rpc_manager/l2population_rpc.py index bca71eff316..60a1de35394 100644 --- a/neutron/plugins/ml2/drivers/l2pop/rpc_manager/l2population_rpc.py +++ b/neutron/plugins/ml2/drivers/l2pop/rpc_manager/l2population_rpc.py @@ -19,14 +19,12 @@ import itertools from neutron_lib import constants as n_const from oslo_config import cfg from oslo_log import helpers as log_helpers -import six from neutron.plugins.ml2.drivers.l2pop import rpc as l2pop_rpc from neutron.plugins.ml2.drivers.openvswitch.agent import vlanmanager -@six.add_metaclass(abc.ABCMeta) -class L2populationRpcCallBackMixin(object): +class L2populationRpcCallBackMixin(object, metaclass=abc.ABCMeta): '''General mixin class of L2-population RPC call back. The following methods are called through RPC. @@ -105,8 +103,8 @@ class L2populationRpcCallBackMixin(object): pass -@six.add_metaclass(abc.ABCMeta) -class L2populationRpcCallBackTunnelMixin(L2populationRpcCallBackMixin): +class L2populationRpcCallBackTunnelMixin(L2populationRpcCallBackMixin, + metaclass=abc.ABCMeta): '''Mixin class of L2-population call back for Tunnel. The following methods are all used in agents as internal methods. diff --git a/neutron/plugins/ml2/drivers/mech_agent.py b/neutron/plugins/ml2/drivers/mech_agent.py index 348427f51f5..8d3d158ef93 100644 --- a/neutron/plugins/ml2/drivers/mech_agent.py +++ b/neutron/plugins/ml2/drivers/mech_agent.py @@ -22,7 +22,6 @@ from neutron_lib import constants as const from neutron_lib.placement import utils as place_utils from neutron_lib.plugins.ml2 import api from oslo_log import log -import six from neutron._i18n import _ from neutron.db import provisioning_blocks @@ -30,8 +29,7 @@ from neutron.db import provisioning_blocks LOG = log.getLogger(__name__) -@six.add_metaclass(abc.ABCMeta) -class AgentMechanismDriverBase(api.MechanismDriver): +class AgentMechanismDriverBase(api.MechanismDriver, metaclass=abc.ABCMeta): """Base class for drivers that attach to networks using an L2 agent. The AgentMechanismDriverBase provides common code for mechanism @@ -236,8 +234,8 @@ class AgentMechanismDriverBase(api.MechanismDriver): return False -@six.add_metaclass(abc.ABCMeta) -class SimpleAgentMechanismDriverBase(AgentMechanismDriverBase): +class SimpleAgentMechanismDriverBase(AgentMechanismDriverBase, + metaclass=abc.ABCMeta): """Base class for simple drivers using an L2 agent. The SimpleAgentMechanismDriverBase provides common code for diff --git a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py index 7d2793cf6e6..bcf3363b7b4 100644 --- a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py +++ b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py @@ -15,13 +15,11 @@ import abc from ovsdbapp import api -import six from neutron.common.ovn import constants as ovn_const -@six.add_metaclass(abc.ABCMeta) -class API(api.API): +class API(api.API, metaclass=abc.ABCMeta): @abc.abstractmethod def create_lswitch_port(self, lport_name, lswitch_name, may_exist=True, @@ -627,8 +625,7 @@ class API(api.API): """ -@six.add_metaclass(abc.ABCMeta) -class SbAPI(api.API): +class SbAPI(api.API, metaclass=abc.ABCMeta): @abc.abstractmethod def chassis_exists(self, hostname): diff --git a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_db_sync.py b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_db_sync.py index 17c372f3f0b..9c3110c7ebd 100644 --- a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_db_sync.py +++ b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_db_sync.py @@ -24,7 +24,6 @@ from neutron_lib.plugins import constants as plugin_constants from neutron_lib.plugins import directory from neutron_lib.utils import helpers from oslo_log import log -import six from neutron.common.ovn import acl as acl_utils from neutron.common.ovn import constants as ovn_const @@ -41,8 +40,7 @@ SYNC_MODE_LOG = 'log' SYNC_MODE_REPAIR = 'repair' -@six.add_metaclass(abc.ABCMeta) -class OvnDbSynchronizer(object): +class OvnDbSynchronizer(object, metaclass=abc.ABCMeta): def __init__(self, core_plugin, ovn_api, ovn_driver): self.ovn_driver = ovn_driver diff --git a/neutron/plugins/ml2/drivers/type_tunnel.py b/neutron/plugins/ml2/drivers/type_tunnel.py index 6a069481cf8..e4c7134cac5 100644 --- a/neutron/plugins/ml2/drivers/type_tunnel.py +++ b/neutron/plugins/ml2/drivers/type_tunnel.py @@ -30,7 +30,6 @@ from oslo_config import cfg from oslo_db import exception as db_exc from oslo_log import log from oslo_utils import uuidutils -import six from six import moves from sqlalchemy import or_ @@ -54,8 +53,7 @@ def chunks(iterable, chunk_size): chunk = list(itertools.islice(iterator, 0, chunk_size)) -@six.add_metaclass(abc.ABCMeta) -class _TunnelTypeDriverBase(helpers.SegmentTypeDriver): +class _TunnelTypeDriverBase(helpers.SegmentTypeDriver, metaclass=abc.ABCMeta): BULK_SIZE = 100 @@ -281,8 +279,7 @@ class _TunnelTypeDriverBase(helpers.SegmentTypeDriver): return ranges -@six.add_metaclass(abc.ABCMeta) -class TunnelTypeDriver(_TunnelTypeDriverBase): +class TunnelTypeDriver(_TunnelTypeDriverBase, metaclass=abc.ABCMeta): """Define stable abstract interface for ML2 type drivers. tunnel type networks rely on tunnel endpoints. This class defines abstract @@ -354,8 +351,7 @@ class TunnelTypeDriver(_TunnelTypeDriverBase): first()) -@six.add_metaclass(abc.ABCMeta) -class ML2TunnelTypeDriver(_TunnelTypeDriverBase): +class ML2TunnelTypeDriver(_TunnelTypeDriverBase, metaclass=abc.ABCMeta): """Define stable abstract interface for ML2 type drivers. tunnel type networks rely on tunnel endpoints. This class defines abstract diff --git a/neutron/scheduler/base_resource_filter.py b/neutron/scheduler/base_resource_filter.py index d49201c3e43..c597958c653 100644 --- a/neutron/scheduler/base_resource_filter.py +++ b/neutron/scheduler/base_resource_filter.py @@ -16,11 +16,9 @@ import abc from neutron_lib.db import api as db_api -import six -@six.add_metaclass(abc.ABCMeta) -class BaseResourceFilter(object): +class BaseResourceFilter(object, metaclass=abc.ABCMeta): """Encapsulate logic that is specific to the resource type.""" @abc.abstractmethod def filter_agents(self, plugin, context, resource): diff --git a/neutron/scheduler/base_scheduler.py b/neutron/scheduler/base_scheduler.py index 6928cb79a2a..d7fa604e404 100644 --- a/neutron/scheduler/base_scheduler.py +++ b/neutron/scheduler/base_scheduler.py @@ -18,13 +18,11 @@ from operator import attrgetter import random from oslo_log import log as logging -import six LOG = logging.getLogger(__name__) -@six.add_metaclass(abc.ABCMeta) -class BaseScheduler(object): +class BaseScheduler(object, metaclass=abc.ABCMeta): """The base scheduler (agnostic to resource type). Child classes of BaseScheduler must define the self.resource_filter to filter agents of diff --git a/neutron/scheduler/l3_agent_scheduler.py b/neutron/scheduler/l3_agent_scheduler.py index 5810cf85b84..42ec78d4392 100644 --- a/neutron/scheduler/l3_agent_scheduler.py +++ b/neutron/scheduler/l3_agent_scheduler.py @@ -26,7 +26,6 @@ from neutron_lib.exceptions import l3 as l3_exc from oslo_config import cfg from oslo_db import exception as db_exc from oslo_log import log as logging -import six from neutron.common import utils from neutron.conf.db import l3_hamode_db @@ -38,8 +37,7 @@ LOG = logging.getLogger(__name__) cfg.CONF.register_opts(l3_hamode_db.L3_HA_OPTS) -@six.add_metaclass(abc.ABCMeta) -class L3Scheduler(object): +class L3Scheduler(object, metaclass=abc.ABCMeta): def __init__(self): self.max_ha_agents = cfg.CONF.max_l3_agents_per_router diff --git a/neutron/scheduler/l3_ovn_scheduler.py b/neutron/scheduler/l3_ovn_scheduler.py index d726a375122..c084ed31250 100644 --- a/neutron/scheduler/l3_ovn_scheduler.py +++ b/neutron/scheduler/l3_ovn_scheduler.py @@ -17,7 +17,6 @@ import copy import random from oslo_log import log -import six from neutron.common.ovn import constants as ovn_const from neutron.common.ovn import utils @@ -30,8 +29,7 @@ OVN_SCHEDULER_CHANCE = 'chance' OVN_SCHEDULER_LEAST_LOADED = 'leastloaded' -@six.add_metaclass(abc.ABCMeta) -class OVNGatewayScheduler(object): +class OVNGatewayScheduler(object, metaclass=abc.ABCMeta): def __init__(self): pass diff --git a/neutron/services/externaldns/driver.py b/neutron/services/externaldns/driver.py index ae9feef7c79..3e627fd6078 100644 --- a/neutron/services/externaldns/driver.py +++ b/neutron/services/externaldns/driver.py @@ -17,15 +17,13 @@ import abc from oslo_config import cfg from oslo_log import log -import six from neutron import manager LOG = log.getLogger(__name__) -@six.add_metaclass(abc.ABCMeta) -class ExternalDNSService(object): +class ExternalDNSService(object, metaclass=abc.ABCMeta): """Interface definition for an external dns service driver.""" def __init__(self): diff --git a/neutron/services/logapi/agent/log_extension.py b/neutron/services/logapi/agent/log_extension.py index 3c8f28afe63..d9396f25bd0 100644 --- a/neutron/services/logapi/agent/log_extension.py +++ b/neutron/services/logapi/agent/log_extension.py @@ -19,7 +19,6 @@ import contextlib from neutron_lib.agent import extension from neutron_lib import constants from oslo_concurrency import lockutils -import six from neutron.api.rpc.callbacks.consumer import registry from neutron.api.rpc.callbacks import events @@ -34,8 +33,7 @@ log_cfg.register_log_driver_opts() LOGGING_DRIVERS_NAMESPACE = 'neutron.services.logapi.drivers' -@six.add_metaclass(abc.ABCMeta) -class LoggingDriver(object): +class LoggingDriver(object, metaclass=abc.ABCMeta): """Defines abstract interface for logging driver""" # specific logging types are supported diff --git a/neutron/services/metering/drivers/abstract_driver.py b/neutron/services/metering/drivers/abstract_driver.py index ce7e8561d63..1478b7f4079 100644 --- a/neutron/services/metering/drivers/abstract_driver.py +++ b/neutron/services/metering/drivers/abstract_driver.py @@ -14,11 +14,8 @@ import abc -import six - -@six.add_metaclass(abc.ABCMeta) -class MeteringAbstractDriver(object): +class MeteringAbstractDriver(object, metaclass=abc.ABCMeta): """Abstract Metering driver.""" def __init__(self, plugin, conf): diff --git a/neutron/tests/base.py b/neutron/tests/base.py index d223de5d500..5bd84cd5b6b 100644 --- a/neutron/tests/base.py +++ b/neutron/tests/base.py @@ -215,8 +215,7 @@ class _CatchTimeoutMetaclass(abc.ABCMeta): # kills the whole worker, with all test cases scheduled to it. This metaclass # makes all test cases convert Timeout exceptions into unittest friendly # failure mode (self.fail). -@six.add_metaclass(_CatchTimeoutMetaclass) -class DietTestCase(base.BaseTestCase): +class DietTestCase(base.BaseTestCase, metaclass=_CatchTimeoutMetaclass): """Same great taste, less filling. BaseTestCase is responsible for doing lots of plugin-centric setup diff --git a/neutron/tests/common/net_helpers.py b/neutron/tests/common/net_helpers.py index fa8a2fd1a8c..b5899456235 100644 --- a/neutron/tests/common/net_helpers.py +++ b/neutron/tests/common/net_helpers.py @@ -32,7 +32,6 @@ from neutron_lib import exceptions as n_exc from oslo_config import cfg from oslo_log import log as logging from oslo_utils import uuidutils -import six from neutron.agent.common import ovs_lib from neutron.agent.linux import bridge_lib @@ -717,8 +716,7 @@ class MacvtapFixture(fixtures.Fixture): pass -@six.add_metaclass(abc.ABCMeta) -class PortFixture(fixtures.Fixture): +class PortFixture(fixtures.Fixture, metaclass=abc.ABCMeta): """Create a port. :ivar port: created port diff --git a/neutron/tests/unit/extensions/foxinsocks.py b/neutron/tests/unit/extensions/foxinsocks.py index e6b1384c659..a3bbe907acf 100644 --- a/neutron/tests/unit/extensions/foxinsocks.py +++ b/neutron/tests/unit/extensions/foxinsocks.py @@ -18,7 +18,6 @@ import abc from neutron_lib.api import extensions as api_extensions from neutron_lib.services import base from oslo_serialization import jsonutils -import six from neutron.api import extensions from neutron import wsgi @@ -30,8 +29,7 @@ class FoxInSocksController(wsgi.Controller): return "Try to say this Mr. Knox, sir..." -@six.add_metaclass(abc.ABCMeta) -class FoxInSocksPluginInterface(base.ServicePluginBase): +class FoxInSocksPluginInterface(base.ServicePluginBase, metaclass=abc.ABCMeta): @abc.abstractmethod def method_to_support_foxnsox_extension(self):