From e44c9883066d9b2d081a594b97aac3d598d491c9 Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Mon, 11 May 2020 10:17:47 +0200 Subject: [PATCH] Remove six usage Remove six, the python 2/3 compatibility library. It's not needed anymore since the repo is python3 only. Remove a now unneeded hacking test. Change-Id: I40522c4accb4aaf8115d11fee8b081e2d991cb4d --- oslo_messaging/_drivers/amqp.py | 3 +-- .../_drivers/amqp1_driver/controller.py | 26 +++++++++---------- oslo_messaging/_drivers/amqpdriver.py | 12 ++++----- oslo_messaging/_drivers/base.py | 16 ++++-------- oslo_messaging/_drivers/common.py | 21 +++++---------- oslo_messaging/_drivers/impl_fake.py | 10 +++---- oslo_messaging/_drivers/impl_rabbit.py | 16 +++++------- oslo_messaging/_drivers/pool.py | 4 +-- oslo_messaging/dispatcher.py | 5 +--- oslo_messaging/exceptions.py | 4 +-- oslo_messaging/hacking/checks.py | 20 ++------------ oslo_messaging/notify/dispatcher.py | 4 +-- oslo_messaging/notify/filter.py | 4 +-- oslo_messaging/notify/notifier.py | 10 +++---- oslo_messaging/rpc/client.py | 4 +-- oslo_messaging/rpc/dispatcher.py | 5 +--- oslo_messaging/serializer.py | 4 +-- oslo_messaging/server.py | 5 ++-- oslo_messaging/tests/__init__.py | 2 +- .../tests/drivers/test_amqp_driver.py | 8 +++--- .../tests/drivers/test_impl_kafka.py | 3 ++- .../tests/drivers/test_impl_rabbit.py | 2 +- .../tests/functional/test_functional.py | 3 +-- oslo_messaging/tests/functional/utils.py | 8 +++--- .../tests/notify/test_dispatcher.py | 2 +- oslo_messaging/tests/notify/test_listener.py | 2 +- .../tests/notify/test_log_handler.py | 2 +- oslo_messaging/tests/notify/test_logger.py | 2 +- .../tests/notify/test_middleware.py | 2 +- oslo_messaging/tests/notify/test_notifier.py | 2 +- oslo_messaging/tests/rpc/test_client.py | 2 +- oslo_messaging/tests/rpc/test_dispatcher.py | 2 +- oslo_messaging/tests/rpc/test_server.py | 3 ++- .../tests/test_exception_serialization.py | 9 +++---- oslo_messaging/tests/test_opts.py | 4 ++- oslo_messaging/tests/test_transport.py | 8 +++--- oslo_messaging/tests/test_utils.py | 2 +- oslo_messaging/transport.py | 5 ++-- requirements.txt | 1 - test-requirements.txt | 1 - tools/simulator.py | 13 +++++----- tox.ini | 2 -- 42 files changed, 102 insertions(+), 161 deletions(-) diff --git a/oslo_messaging/_drivers/amqp.py b/oslo_messaging/_drivers/amqp.py index a8289dbc9..d4db2c6b8 100644 --- a/oslo_messaging/_drivers/amqp.py +++ b/oslo_messaging/_drivers/amqp.py @@ -26,7 +26,6 @@ import collections import uuid from oslo_config import cfg -import six from oslo_messaging._drivers import common as rpc_common @@ -62,7 +61,7 @@ def unpack_context(msg): """Unpack context from msg.""" context_dict = {} for key in list(msg.keys()): - key = six.text_type(key) + key = str(key) if key.startswith('_context_'): value = msg.pop(key) context_dict[key[9:]] = value diff --git a/oslo_messaging/_drivers/amqp1_driver/controller.py b/oslo_messaging/_drivers/amqp1_driver/controller.py index 3e2f5bbf8..62975071b 100644 --- a/oslo_messaging/_drivers/amqp1_driver/controller.py +++ b/oslo_messaging/_drivers/amqp1_driver/controller.py @@ -29,6 +29,7 @@ import collections import logging import os import platform +import queue import random import sys import threading @@ -38,9 +39,6 @@ import uuid from oslo_utils import eventletutils import proton import pyngus -from six import iteritems -from six import itervalues -from six import moves from oslo_messaging._drivers.amqp1_driver.addressing import AddresserFactory from oslo_messaging._drivers.amqp1_driver.addressing import keyify @@ -868,7 +866,7 @@ class Controller(pyngus.ConnectionEventHandler): self._command = os.path.basename(sys.argv[0]) self._pid = os.getpid() # queue of drivertask objects to execute on the eventloop thread - self._tasks = moves.queue.Queue(maxsize=500) + self._tasks = queue.Queue(maxsize=500) # limit the number of Task()'s to execute per call to _process_tasks(). # This allows the eventloop main thread to return to servicing socket # I/O in a timely manner @@ -961,7 +959,7 @@ class Controller(pyngus.ConnectionEventHandler): LOG.debug("Waiting for eventloop to exit") self.processor.join(timeout) self._hard_reset("Shutting down") - for sender in itervalues(self._all_senders): + for sender in self._all_senders.values(): sender.destroy() self._all_senders.clear() self._servers.clear() @@ -1134,7 +1132,7 @@ class Controller(pyngus.ConnectionEventHandler): 'vhost': ("/" + self.hosts.virtual_host if self.hosts.virtual_host else "")}) - for sender in itervalues(self._all_senders): + for sender in self._all_senders.values(): sender.attach(self._socket_connection.pyngus_conn, self.reply_link, self.addresser) @@ -1181,8 +1179,8 @@ class Controller(pyngus.ConnectionEventHandler): self.addresser = self.addresser_factory(props, self.hosts.virtual_host if self.pseudo_vhost else None) - for servers in itervalues(self._servers): - for server in itervalues(servers): + for servers in self._servers.values(): + for server in servers.values(): server.attach(self._socket_connection.pyngus_conn, self.addresser) self.reply_link = Replies(self._socket_connection.pyngus_conn, @@ -1279,7 +1277,7 @@ class Controller(pyngus.ConnectionEventHandler): del self._purged_senders[:] self._active_senders.clear() unused = [] - for key, sender in iteritems(self._all_senders): + for key, sender in self._all_senders.items(): # clean up any sender links that no longer have messages to send if sender.pending_messages == 0: unused.append(key) @@ -1289,8 +1287,8 @@ class Controller(pyngus.ConnectionEventHandler): for key in unused: self._all_senders[key].destroy(reason) del self._all_senders[key] - for servers in itervalues(self._servers): - for server in itervalues(servers): + for servers in self._servers.values(): + for server in servers.values(): server.reset() if self.reply_link: self.reply_link.destroy() @@ -1300,13 +1298,13 @@ class Controller(pyngus.ConnectionEventHandler): def _detach_senders(self): """Close all sender links""" - for sender in itervalues(self._all_senders): + for sender in self._all_senders.values(): sender.detach() def _detach_servers(self): """Close all listener links""" - for servers in itervalues(self._servers): - for server in itervalues(servers): + for servers in self._servers.values(): + for server in servers.values(): server.detach() def _purge_sender_links(self): diff --git a/oslo_messaging/_drivers/amqpdriver.py b/oslo_messaging/_drivers/amqpdriver.py index 89e3fd38d..011222cee 100644 --- a/oslo_messaging/_drivers/amqpdriver.py +++ b/oslo_messaging/_drivers/amqpdriver.py @@ -14,6 +14,7 @@ # under the License. import logging +import queue import threading import time import uuid @@ -21,7 +22,6 @@ import uuid import cachetools from oslo_utils import eventletutils from oslo_utils import timeutils -from six import moves import oslo_messaging from oslo_messaging._drivers import amqp as rpc_amqp @@ -48,7 +48,7 @@ class MessageOperationsHandler(object): def __init__(self, name): self.name = "%s (%s)" % (name, hex(id(self))) - self._tasks = moves.queue.Queue() + self._tasks = queue.Queue() self._shutdown = eventletutils.Event() self._shutdown_thread = threading.Thread( @@ -75,7 +75,7 @@ class MessageOperationsHandler(object): while True: try: task = self._tasks.get(block=False) - except moves.queue.Empty: + except queue.Empty: break task() @@ -403,7 +403,7 @@ class ReplyWaiters(object): def get(self, msg_id, timeout): try: return self._queues[msg_id].get(block=True, timeout=timeout) - except moves.queue.Empty: + except queue.Empty: raise oslo_messaging.MessagingTimeout( 'Timed out waiting for a reply ' 'to message ID %s' % msg_id) @@ -418,7 +418,7 @@ class ReplyWaiters(object): queue.put(message_data) def add(self, msg_id): - self._queues[msg_id] = moves.queue.Queue() + self._queues[msg_id] = queue.Queue() queues_length = len(self._queues) if queues_length > self._wrn_threshold: LOG.warning('Number of call queues is %(queues_length)s, ' @@ -529,7 +529,7 @@ class ReplyWaiter(object): timeout = cm_timeout try: message = self.waiters.get(msg_id, timeout=timeout) - except moves.queue.Empty: + except queue.Empty: self._raise_timeout_exception(msg_id) reply, ending = self._process_reply(message) diff --git a/oslo_messaging/_drivers/base.py b/oslo_messaging/_drivers/base.py index fb44540e9..2947e6d53 100644 --- a/oslo_messaging/_drivers/base.py +++ b/oslo_messaging/_drivers/base.py @@ -18,7 +18,6 @@ import threading from oslo_config import cfg from oslo_utils import excutils from oslo_utils import timeutils -import six from oslo_messaging import exceptions @@ -65,8 +64,7 @@ class TransportDriverError(exceptions.MessagingException): """Base class for transport driver specific exceptions.""" -@six.add_metaclass(abc.ABCMeta) -class IncomingMessage(object): +class IncomingMessage(object, metaclass=abc.ABCMeta): """The IncomingMessage class represents a single message received from the messaging backend. Instances of this class are passed to up a server's messaging processing logic. The backend driver must provide a concrete @@ -116,8 +114,7 @@ class IncomingMessage(object): """ -@six.add_metaclass(abc.ABCMeta) -class RpcIncomingMessage(IncomingMessage): +class RpcIncomingMessage(IncomingMessage, metaclass=abc.ABCMeta): """The RpcIncomingMessage represents an RPC request message received from the backend. This class must be used for RPC calls that return a value to the caller. @@ -170,8 +167,7 @@ class RpcIncomingMessage(IncomingMessage): """ -@six.add_metaclass(abc.ABCMeta) -class PollStyleListener(object): +class PollStyleListener(object, metaclass=abc.ABCMeta): """A PollStyleListener is used to transfer received messages to a server for processing. A polling pattern is used to retrieve messages. A PollStyleListener uses a separate thread to run the polling loop. A @@ -227,8 +223,7 @@ class PollStyleListener(object): pass -@six.add_metaclass(abc.ABCMeta) -class Listener(object): +class Listener(object, metaclass=abc.ABCMeta): """A Listener is used to transfer incoming messages from the driver to a server for processing. A callback is used by the driver to transfer the messages. @@ -328,8 +323,7 @@ class PollStyleListenerAdapter(Listener): self._poll_style_listener.cleanup() -@six.add_metaclass(abc.ABCMeta) -class BaseDriver(object): +class BaseDriver(object, metaclass=abc.ABCMeta): """Defines the backend driver interface. Each backend driver implementation must provide a concrete derivation of this class implementing the backend specific logic for its public methods. diff --git a/oslo_messaging/_drivers/common.py b/oslo_messaging/_drivers/common.py index 64351b2b3..54c6f7fcb 100644 --- a/oslo_messaging/_drivers/common.py +++ b/oslo_messaging/_drivers/common.py @@ -15,13 +15,7 @@ # License for the specific language governing permissions and limitations # under the License. -# TODO(smcginnis) update this once six has support for collections.abc -# (https://github.com/benjaminp/six/pull/241) or clean up once we drop py2.7. -try: - from collections.abc import Mapping -except ImportError: - from collections import Mapping - +from collections.abc import Mapping import copy import logging import sys @@ -29,14 +23,13 @@ import traceback from oslo_serialization import jsonutils from oslo_utils import timeutils -import six import oslo_messaging from oslo_messaging import _utils as utils LOG = logging.getLogger(__name__) -_EXCEPTIONS_MODULE = 'exceptions' if six.PY2 else 'builtins' +_EXCEPTIONS_MODULE = 'builtins' _EXCEPTIONS_MODULES = ['exceptions', 'builtins'] @@ -184,8 +177,8 @@ def serialize_remote_exception(failure_info): # NOTE(matiu): With cells, it's possible to re-raise remote, remote # exceptions. Lets turn it back into the original exception type. - cls_name = six.text_type(failure.__class__.__name__) - mod_name = six.text_type(failure.__class__.__module__) + cls_name = str(failure.__class__.__name__) + mod_name = str(failure.__class__.__module__) if (cls_name.endswith(_REMOTE_POSTFIX) and mod_name.endswith(_REMOTE_POSTFIX)): cls_name = cls_name[:-len(_REMOTE_POSTFIX)] @@ -194,7 +187,7 @@ def serialize_remote_exception(failure_info): data = { 'class': cls_name, 'module': mod_name, - 'message': six.text_type(failure), + 'message': str(failure), 'tb': tb, 'args': failure.args, 'kwargs': kwargs @@ -206,7 +199,7 @@ def serialize_remote_exception(failure_info): def deserialize_remote_exception(data, allowed_remote_exmods): - failure = jsonutils.loads(six.text_type(data)) + failure = jsonutils.loads(str(data)) trace = failure.get('tb', []) message = failure.get('message', "") + "\n" + "\n".join(trace) @@ -235,7 +228,7 @@ def deserialize_remote_exception(data, allowed_remote_exmods): failure = klass(*failure.get('args', []), **failure.get('kwargs', {})) except (AttributeError, TypeError, ImportError) as error: LOG.warning("Failed to rebuild remote exception due to error: %s", - six.text_type(error)) + str(error)) return oslo_messaging.RemoteError(name, failure.get('message'), trace) ex_type = type(failure) diff --git a/oslo_messaging/_drivers/impl_fake.py b/oslo_messaging/_drivers/impl_fake.py index 47fa4a382..93e8bc773 100644 --- a/oslo_messaging/_drivers/impl_fake.py +++ b/oslo_messaging/_drivers/impl_fake.py @@ -14,12 +14,12 @@ # under the License. import copy +import queue import threading import time from oslo_serialization import jsonutils from oslo_utils import eventletutils -from six import moves import oslo_messaging from oslo_messaging._drivers import base @@ -133,8 +133,8 @@ class FakeExchange(object): self.deliver_message(topic, ctxt, message, server=server, fanout=fanout, reply_q=reply_q) - for queue in queues: - queue.append((ctxt, message, reply_q, requeue)) + for q in queues: + q.append((ctxt, message, reply_q, requeue)) def poll(self, target, pool): with self._queues_lock: @@ -195,7 +195,7 @@ class FakeDriver(base.BaseDriver): reply_q = None if wait_for_reply: - reply_q = moves.queue.Queue() + reply_q = queue.Queue() exchange.deliver_message(target.topic, ctxt, message, server=target.server, @@ -209,7 +209,7 @@ class FakeDriver(base.BaseDriver): raise failure else: return reply - except moves.queue.Empty: + except queue.Empty: raise oslo_messaging.MessagingTimeout( 'No reply on topic %s' % target.topic) diff --git a/oslo_messaging/_drivers/impl_rabbit.py b/oslo_messaging/_drivers/impl_rabbit.py index 2018c5eb7..c5c39704b 100644 --- a/oslo_messaging/_drivers/impl_rabbit.py +++ b/oslo_messaging/_drivers/impl_rabbit.py @@ -24,6 +24,7 @@ import ssl import sys import threading import time +from urllib import parse import uuid import kombu @@ -34,9 +35,6 @@ from oslo_config import cfg from oslo_log import log as logging from oslo_utils import eventletutils from oslo_utils import importutils -import six -import six.moves -from six.moves.urllib import parse import oslo_messaging from oslo_messaging._drivers import amqp as rpc_amqp @@ -320,7 +318,7 @@ class Consumer(object): self.declare(conn) try: self.queue.consume(callback=self._callback, - consumer_tag=six.text_type(tag), + consumer_tag=str(tag), nowait=self.nowait) except conn.connection.channel_errors as exc: # We retries once because of some races that we can @@ -340,14 +338,14 @@ class Consumer(object): exc.method_name == 'Basic.ack'): self.declare(conn) self.queue.consume(callback=self._callback, - consumer_tag=six.text_type(tag), + consumer_tag=str(tag), nowait=self.nowait) else: raise def cancel(self, tag): LOG.trace('ConsumerBase.cancel: canceling %s', tag) - self.queue.cancel(six.text_type(tag)) + self.queue.cancel(str(tag)) def _callback(self, message): """Call callback with deserialized message. @@ -753,7 +751,7 @@ class Connection(object): info = {'err_str': exc, 'sleep_time': interval} info.update(self._get_connection_info(conn_error=True)) - if 'Socket closed' in six.text_type(exc): + if 'Socket closed' in str(exc): LOG.error('[%(connection_id)s] AMQP server' ' %(hostname)s:%(port)s closed' ' the connection. Check login credentials:' @@ -867,8 +865,8 @@ class Connection(object): """Close/release this connection.""" self._heartbeat_stop() if self.connection: - for consumer in six.moves.filter(lambda c: c.type == 'fanout', - self._consumers): + for consumer in filter(lambda c: c.type == 'fanout', + self._consumers): LOG.debug('[connection close] Deleting fanout ' 'queue: %s ' % consumer.queue.name) consumer.queue.delete() diff --git a/oslo_messaging/_drivers/pool.py b/oslo_messaging/_drivers/pool.py index 774c3ab34..5eea00f92 100644 --- a/oslo_messaging/_drivers/pool.py +++ b/oslo_messaging/_drivers/pool.py @@ -19,7 +19,6 @@ import threading from oslo_log import log as logging from oslo_utils import timeutils -import six from oslo_messaging._drivers import common @@ -36,8 +35,7 @@ else: cond.wait() -@six.add_metaclass(abc.ABCMeta) -class Pool(object): +class Pool(object, metaclass=abc.ABCMeta): """A thread-safe object pool. Modelled after the eventlet.pools.Pool interface, but designed to be safe diff --git a/oslo_messaging/dispatcher.py b/oslo_messaging/dispatcher.py index 82d459586..347a67619 100644 --- a/oslo_messaging/dispatcher.py +++ b/oslo_messaging/dispatcher.py @@ -13,16 +13,13 @@ import abc -import six - __all__ = [ "DispatcherBase" ] -@six.add_metaclass(abc.ABCMeta) -class DispatcherBase(object): +class DispatcherBase(object, metaclass=abc.ABCMeta): "Base class for dispatcher" @abc.abstractmethod diff --git a/oslo_messaging/exceptions.py b/oslo_messaging/exceptions.py index f6ba20a76..48645b30b 100644 --- a/oslo_messaging/exceptions.py +++ b/oslo_messaging/exceptions.py @@ -13,8 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -import six - __all__ = ['MessagingException', 'MessagingTimeout', 'MessageDeliveryFailure', 'InvalidTarget', 'MessageUndeliverable'] @@ -35,7 +33,7 @@ class InvalidTarget(MessagingException, ValueError): """Raised if a target does not meet certain pre-conditions.""" def __init__(self, msg, target): - msg = msg + ":" + six.text_type(target) + msg = msg + ":" + str(target) super(InvalidTarget, self).__init__(msg) self.target = target diff --git a/oslo_messaging/hacking/checks.py b/oslo_messaging/hacking/checks.py index 3925ab4fa..1241b249f 100644 --- a/oslo_messaging/hacking/checks.py +++ b/oslo_messaging/hacking/checks.py @@ -16,7 +16,6 @@ import re import ast from hacking import core -import six oslo_namespace_imports_dot = re.compile(r"import[\s]+oslo[.][^\s]+") @@ -45,18 +44,6 @@ def check_oslo_namespace_imports(logical_line): yield(0, msg) -@core.flake8ext -def check_mock_imports(logical_line): - if re.match(mock_imports_directly, logical_line): - msg = ("O322: '%s' must be used instead of '%s'.") % ( - logical_line.replace('import mock', 'from six.moves import mock'), - logical_line) - yield(0, msg) - elif re.match(mock_imports_direclty_from, logical_line): - msg = "O322: Use mock from six.moves." - yield(0, msg) - - class BaseASTChecker(ast.NodeVisitor): """Provides a simple framework for writing AST-based checks. @@ -152,7 +139,7 @@ class CheckForLoggingIssues(BaseASTChecker): if obj_name is None: return None return obj_name + '.' + method_name - elif isinstance(node, six.string_types): + elif isinstance(node, str): return node else: # could be Subscript, Call or many more return None @@ -284,10 +271,7 @@ class CheckForLoggingIssues(BaseASTChecker): peers = find_peers(node) for peer in peers: if isinstance(peer, ast.Raise): - if six.PY3: - exc = peer.exc - else: - exc = peer.type + exc = peer.exc if (isinstance(exc, ast.Call) and len(exc.args) > 0 and isinstance(exc.args[0], ast.Name) and diff --git a/oslo_messaging/notify/dispatcher.py b/oslo_messaging/notify/dispatcher.py index df4fc42da..4d31a684b 100644 --- a/oslo_messaging/notify/dispatcher.py +++ b/oslo_messaging/notify/dispatcher.py @@ -18,8 +18,6 @@ import itertools import logging import operator -import six - from oslo_messaging import dispatcher from oslo_messaging import serializer as msg_serializer @@ -124,7 +122,7 @@ class BatchNotificationDispatcher(NotificationDispatcher): requeues = set() for priority, messages in messages_grouped: - __, raw_messages, messages = six.moves.zip(*messages) + __, raw_messages, messages = zip(*messages) if priority not in PRIORITIES: LOG.warning('Unknown priority "%s"', priority) continue diff --git a/oslo_messaging/notify/filter.py b/oslo_messaging/notify/filter.py index 44eb8278f..349f82ded 100644 --- a/oslo_messaging/notify/filter.py +++ b/oslo_messaging/notify/filter.py @@ -15,8 +15,6 @@ import re -import six - class NotificationFilter(object): @@ -63,7 +61,7 @@ class NotificationFilter(object): def _check_for_single_mismatch(data, regex): if regex is None: return False - if not isinstance(data, six.string_types): + if not isinstance(data, str): return True if not regex.match(data): return True diff --git a/oslo_messaging/notify/notifier.py b/oslo_messaging/notify/notifier.py index ebe05dd14..02ff643ed 100644 --- a/oslo_messaging/notify/notifier.py +++ b/oslo_messaging/notify/notifier.py @@ -22,7 +22,6 @@ import uuid from oslo_config import cfg from oslo_utils import timeutils -import six from stevedore import extension from stevedore import named @@ -106,8 +105,7 @@ def _send_notification(): notifier._notify({}, args.event_type, args.payload, args.priority) -@six.add_metaclass(abc.ABCMeta) -class Driver(object): +class Driver(object, metaclass=abc.ABCMeta): """Base driver for Notifications""" def __init__(self, conf, topics, transport): @@ -182,7 +180,7 @@ class Notifier(object): Notification messages follow the following format:: - {'message_id': six.text_type(uuid.uuid4()), + {'message_id': str(uuid.uuid4()), 'publisher_id': 'compute.host1', 'timestamp': timeutils.utcnow(), 'priority': 'WARN', @@ -300,12 +298,12 @@ class Notifier(object): payload = self._serializer.serialize_entity(ctxt, payload) ctxt = self._serializer.serialize_context(ctxt) - msg = dict(message_id=six.text_type(uuid.uuid4()), + msg = dict(message_id=str(uuid.uuid4()), publisher_id=publisher_id or self.publisher_id, event_type=event_type, priority=priority, payload=payload, - timestamp=six.text_type(timeutils.utcnow())) + timestamp=str(timeutils.utcnow())) def do_notify(ext): try: diff --git a/oslo_messaging/rpc/client.py b/oslo_messaging/rpc/client.py index ea5f54e2c..115198bf5 100644 --- a/oslo_messaging/rpc/client.py +++ b/oslo_messaging/rpc/client.py @@ -19,7 +19,6 @@ import abc import logging from oslo_config import cfg -import six from oslo_messaging._drivers import base as driver_base from oslo_messaging import _utils as utils @@ -85,8 +84,7 @@ class ClientSendError(exceptions.MessagingException): self.ex = ex -@six.add_metaclass(abc.ABCMeta) -class _BaseCallContext(object): +class _BaseCallContext(object, metaclass=abc.ABCMeta): _marker = object() diff --git a/oslo_messaging/rpc/dispatcher.py b/oslo_messaging/rpc/dispatcher.py index c118931e4..86e2e6630 100644 --- a/oslo_messaging/rpc/dispatcher.py +++ b/oslo_messaging/rpc/dispatcher.py @@ -22,8 +22,6 @@ import logging import sys import threading -import six - from oslo_utils import eventletutils from oslo_messaging import _utils as utils @@ -83,8 +81,7 @@ class UnsupportedVersion(RPCDispatcherError): self.method = method -@six.add_metaclass(ABCMeta) -class RPCAccessPolicyBase(object): +class RPCAccessPolicyBase(object, metaclass=ABCMeta): """Determines which endpoint methods may be invoked via RPC""" @abstractmethod diff --git a/oslo_messaging/serializer.py b/oslo_messaging/serializer.py index 56fe9d764..acfecddc4 100644 --- a/oslo_messaging/serializer.py +++ b/oslo_messaging/serializer.py @@ -17,13 +17,11 @@ import abc from oslo_serialization import jsonutils -import six __all__ = ['Serializer', 'NoOpSerializer', 'JsonPayloadSerializer'] -@six.add_metaclass(abc.ABCMeta) -class Serializer(object): +class Serializer(object, metaclass=abc.ABCMeta): """Generic (de-)serialization definition base class.""" @abc.abstractmethod diff --git a/oslo_messaging/server.py b/oslo_messaging/server.py index 4df1512b5..3eb33a2ef 100644 --- a/oslo_messaging/server.py +++ b/oslo_messaging/server.py @@ -27,7 +27,6 @@ from oslo_config import cfg from oslo_service import service from oslo_utils import eventletutils from oslo_utils import timeutils -import six from stevedore import driver from oslo_messaging._drivers import base as driver_base @@ -297,8 +296,8 @@ def ordered(after=None, reset_after=None): return _ordered -@six.add_metaclass(abc.ABCMeta) -class MessageHandlingServer(service.ServiceBase, _OrderedTaskRunner): +class MessageHandlingServer(service.ServiceBase, _OrderedTaskRunner, + metaclass=abc.ABCMeta): """Server for handling messages. Connect a transport to a dispatcher that knows how to process the diff --git a/oslo_messaging/tests/__init__.py b/oslo_messaging/tests/__init__.py index 7564f2688..ed8a3f831 100644 --- a/oslo_messaging/tests/__init__.py +++ b/oslo_messaging/tests/__init__.py @@ -19,5 +19,5 @@ eventlet.monkey_patch() # oslotest prepares mock for six in oslotest/__init__.py as follow: # six.add_move(six.MovedModule('mock', 'mock', 'unittest.mock')) and # oslo.messaging imports oslotest before importing test submodules to -# setup six.moves for mock, then "from six.moves import mock" works well. +# setup six.moves for mock, then "from unittest import mock" works well. import oslotest diff --git a/oslo_messaging/tests/drivers/test_amqp_driver.py b/oslo_messaging/tests/drivers/test_amqp_driver.py index cfcc0678b..7f39da89a 100644 --- a/oslo_messaging/tests/drivers/test_amqp_driver.py +++ b/oslo_messaging/tests/drivers/test_amqp_driver.py @@ -15,21 +15,21 @@ import copy import logging import os +import queue import select import shlex import shutil -from six.moves import mock import socket import subprocess import sys import tempfile import threading import time +from unittest import mock import uuid from oslo_utils import eventletutils from oslo_utils import importutils -from six import moves from string import Template import testtools @@ -74,7 +74,7 @@ class _ListenerThread(threading.Thread): self.listener = listener self.msg_count = msg_count self._msg_ack = msg_ack - self.messages = moves.queue.Queue() + self.messages = queue.Queue() self.daemon = True self.started = eventletutils.Event() self._done = eventletutils.Event() @@ -106,7 +106,7 @@ class _ListenerThread(threading.Thread): while True: m = self.messages.get(False) msgs.append(m) - except moves.queue.Empty: + except queue.Empty: pass return msgs diff --git a/oslo_messaging/tests/drivers/test_impl_kafka.py b/oslo_messaging/tests/drivers/test_impl_kafka.py index 72a86831f..77b2ed6cf 100644 --- a/oslo_messaging/tests/drivers/test_impl_kafka.py +++ b/oslo_messaging/tests/drivers/test_impl_kafka.py @@ -11,8 +11,9 @@ # 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 six.moves import mock + import testscenarios +from unittest import mock import oslo_messaging from oslo_messaging._drivers import impl_kafka as kafka_driver diff --git a/oslo_messaging/tests/drivers/test_impl_rabbit.py b/oslo_messaging/tests/drivers/test_impl_rabbit.py index 9212196f4..3da58a4e7 100644 --- a/oslo_messaging/tests/drivers/test_impl_rabbit.py +++ b/oslo_messaging/tests/drivers/test_impl_rabbit.py @@ -32,7 +32,7 @@ from oslo_messaging._drivers import common as driver_common from oslo_messaging._drivers import impl_rabbit as rabbit_driver from oslo_messaging.exceptions import MessageDeliveryFailure from oslo_messaging.tests import utils as test_utils -from six.moves import mock +from unittest import mock load_tests = testscenarios.load_tests_apply_scenarios diff --git a/oslo_messaging/tests/functional/test_functional.py b/oslo_messaging/tests/functional/test_functional.py index a1fcdd16d..a71f6c25f 100644 --- a/oslo_messaging/tests/functional/test_functional.py +++ b/oslo_messaging/tests/functional/test_functional.py @@ -17,7 +17,6 @@ import uuid import concurrent.futures from oslo_config import cfg -import six.moves from testtools import matchers import oslo_messaging @@ -535,7 +534,7 @@ class NotifyTestCase(utils.SkipIfNoTransportURL): batch_timeout=batch_timeout)) notifier = listener.notifier('abc') - for i in six.moves.range(0, 205): + for i in range(0, 205): notifier.info({}, 'test%s' % i, 'Hello World!') events = listener.get_events(timeout=get_timeout) self.assertEqual(3, len(events)) diff --git a/oslo_messaging/tests/functional/utils.py b/oslo_messaging/tests/functional/utils.py index 5f6f9c7e6..371c170a1 100644 --- a/oslo_messaging/tests/functional/utils.py +++ b/oslo_messaging/tests/functional/utils.py @@ -12,12 +12,12 @@ # under the License. import os +import queue import time import uuid import fixtures from oslo_config import cfg -from six import moves import oslo_messaging from oslo_messaging._drivers.kafka_driver import kafka_options @@ -102,7 +102,7 @@ class RpcServerFixture(fixtures.Fixture): self.target = target self.endpoint = endpoint or TestServerEndpoint() self.executor = executor - self.syncq = moves.queue.Queue() + self.syncq = queue.Queue() self.ctrl_target = ctrl_target or self.target def setUp(self): @@ -323,7 +323,7 @@ class NotificationFixture(fixtures.Fixture): self.conf = conf self.url = url self.topics = topics - self.events = moves.queue.Queue() + self.events = queue.Queue() self.name = str(id(self)) self.batch = batch @@ -395,7 +395,7 @@ class NotificationFixture(fixtures.Fixture): try: while True: results.append(self.events.get(timeout=timeout)) - except moves.queue.Empty: + except queue.Empty: pass return results diff --git a/oslo_messaging/tests/notify/test_dispatcher.py b/oslo_messaging/tests/notify/test_dispatcher.py index 93a14676f..98a1de4b4 100644 --- a/oslo_messaging/tests/notify/test_dispatcher.py +++ b/oslo_messaging/tests/notify/test_dispatcher.py @@ -19,7 +19,7 @@ import testscenarios import oslo_messaging from oslo_messaging.notify import dispatcher as notify_dispatcher from oslo_messaging.tests import utils as test_utils -from six.moves import mock +from unittest import mock load_tests = testscenarios.load_tests_apply_scenarios diff --git a/oslo_messaging/tests/notify/test_listener.py b/oslo_messaging/tests/notify/test_listener.py index 1125b1781..a94ca0bc7 100644 --- a/oslo_messaging/tests/notify/test_listener.py +++ b/oslo_messaging/tests/notify/test_listener.py @@ -23,7 +23,7 @@ import oslo_messaging from oslo_messaging.notify import dispatcher from oslo_messaging.notify import notifier as msg_notifier from oslo_messaging.tests import utils as test_utils -from six.moves import mock +from unittest import mock load_tests = testscenarios.load_tests_apply_scenarios diff --git a/oslo_messaging/tests/notify/test_log_handler.py b/oslo_messaging/tests/notify/test_log_handler.py index 40d109451..1f60af312 100644 --- a/oslo_messaging/tests/notify/test_log_handler.py +++ b/oslo_messaging/tests/notify/test_log_handler.py @@ -17,7 +17,7 @@ import fixtures import oslo_messaging from oslo_messaging.notify import log_handler from oslo_messaging.tests import utils as test_utils -from six.moves import mock +from unittest import mock class PublishErrorsHandlerTestCase(test_utils.BaseTestCase): diff --git a/oslo_messaging/tests/notify/test_logger.py b/oslo_messaging/tests/notify/test_logger.py index b5cad25ef..2161ff18d 100644 --- a/oslo_messaging/tests/notify/test_logger.py +++ b/oslo_messaging/tests/notify/test_logger.py @@ -23,7 +23,7 @@ import testscenarios import oslo_messaging from oslo_messaging.tests import utils as test_utils -from six.moves import mock +from unittest import mock load_tests = testscenarios.load_tests_apply_scenarios diff --git a/oslo_messaging/tests/notify/test_middleware.py b/oslo_messaging/tests/notify/test_middleware.py index 65ee79c29..9fe968d35 100644 --- a/oslo_messaging/tests/notify/test_middleware.py +++ b/oslo_messaging/tests/notify/test_middleware.py @@ -19,7 +19,7 @@ import webob from oslo_messaging.notify import middleware from oslo_messaging.tests import utils -from six.moves import mock +from unittest import mock class FakeApp(object): diff --git a/oslo_messaging/tests/notify/test_notifier.py b/oslo_messaging/tests/notify/test_notifier.py index 2d6b7716e..832ee02ed 100755 --- a/oslo_messaging/tests/notify/test_notifier.py +++ b/oslo_messaging/tests/notify/test_notifier.py @@ -34,7 +34,7 @@ from oslo_messaging.notify import messaging from oslo_messaging.notify import notifier as msg_notifier from oslo_messaging import serializer as msg_serializer from oslo_messaging.tests import utils as test_utils -from six.moves import mock +from unittest import mock load_tests = testscenarios.load_tests_apply_scenarios diff --git a/oslo_messaging/tests/rpc/test_client.py b/oslo_messaging/tests/rpc/test_client.py index 4063562a4..af1282af0 100755 --- a/oslo_messaging/tests/rpc/test_client.py +++ b/oslo_messaging/tests/rpc/test_client.py @@ -14,8 +14,8 @@ # under the License. from oslo_config import cfg -from six.moves import mock import testscenarios +from unittest import mock import oslo_messaging from oslo_messaging import exceptions diff --git a/oslo_messaging/tests/rpc/test_dispatcher.py b/oslo_messaging/tests/rpc/test_dispatcher.py index 0bc201fb0..89b36cd5e 100755 --- a/oslo_messaging/tests/rpc/test_dispatcher.py +++ b/oslo_messaging/tests/rpc/test_dispatcher.py @@ -19,7 +19,7 @@ import oslo_messaging from oslo_messaging import rpc from oslo_messaging import serializer as msg_serializer from oslo_messaging.tests import utils as test_utils -from six.moves import mock +from unittest import mock load_tests = testscenarios.load_tests_apply_scenarios diff --git a/oslo_messaging/tests/rpc/test_server.py b/oslo_messaging/tests/rpc/test_server.py index c993a871a..1fc6be808 100644 --- a/oslo_messaging/tests/rpc/test_server.py +++ b/oslo_messaging/tests/rpc/test_server.py @@ -14,12 +14,13 @@ # under the License. import threading +from unittest import mock + import eventlet import fixtures from oslo_config import cfg from oslo_utils import eventletutils -from six.moves import mock import testscenarios import oslo_messaging diff --git a/oslo_messaging/tests/test_exception_serialization.py b/oslo_messaging/tests/test_exception_serialization.py index d2a10c7aa..93b63c51e 100644 --- a/oslo_messaging/tests/test_exception_serialization.py +++ b/oslo_messaging/tests/test_exception_serialization.py @@ -16,7 +16,6 @@ import sys from oslo_serialization import jsonutils -import six import testscenarios import oslo_messaging @@ -25,8 +24,8 @@ from oslo_messaging.tests import utils as test_utils load_tests = testscenarios.load_tests_apply_scenarios -EXCEPTIONS_MODULE = 'exceptions' if six.PY2 else 'builtins' -OTHER_EXCEPTIONS_MODULE = 'builtins' if six.PY2 else 'exceptions' +EXCEPTIONS_MODULE = 'builtins' +OTHER_EXCEPTIONS_MODULE = 'exceptions' class NovaStyleException(Exception): @@ -289,9 +288,9 @@ class DeserializeRemoteExceptionTestCase(test_utils.BaseTestCase): self.assertIsInstance(ex, self.cls) self.assertEqual(self.remote_name, ex.__class__.__name__) - self.assertEqual(self.str, six.text_type(ex)) + self.assertEqual(self.str, str(ex)) if hasattr(self, 'msg'): - self.assertEqual(self.msg, six.text_type(ex)) + self.assertEqual(self.msg, str(ex)) self.assertEqual((self.msg,) + self.remote_args, ex.args) else: self.assertEqual(self.remote_args, ex.args) diff --git a/oslo_messaging/tests/test_opts.py b/oslo_messaging/tests/test_opts.py index b870d2cdd..8335d86be 100644 --- a/oslo_messaging/tests/test_opts.py +++ b/oslo_messaging/tests/test_opts.py @@ -12,7 +12,9 @@ # 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 six.moves import mock + +from unittest import mock + import stevedore import testtools diff --git a/oslo_messaging/tests/test_transport.py b/oslo_messaging/tests/test_transport.py index 02a19f784..31fec16cd 100755 --- a/oslo_messaging/tests/test_transport.py +++ b/oslo_messaging/tests/test_transport.py @@ -14,9 +14,9 @@ # under the License. import fixtures +from unittest import mock + from oslo_config import cfg -import six -from six.moves import mock from stevedore import driver import testscenarios @@ -150,7 +150,7 @@ class GetTransportSadPathTestCase(test_utils.BaseTestCase): ex_msg_contains = self.ex.pop('msg_contains') ex = self.assertRaises( ex_cls, oslo_messaging.get_transport, self.conf, url=self.url) - self.assertIn(ex_msg_contains, six.text_type(ex)) + self.assertIn(ex_msg_contains, str(ex)) for k, v in self.ex.items(): self.assertTrue(hasattr(ex, k)) self.assertEqual(v, str(getattr(ex, k))) @@ -172,7 +172,7 @@ class _SetDefaultsFixture(fixtures.Fixture): def first(seq, default=None, key=None): if key is None: key = bool - return next(six.moves.filter(key, seq), default) + return next(filter(key, seq), default) def default(opts, name): return first(opts, key=lambda o: o.name == name).default diff --git a/oslo_messaging/tests/test_utils.py b/oslo_messaging/tests/test_utils.py index 05ca1c261..b4c7402df 100644 --- a/oslo_messaging/tests/test_utils.py +++ b/oslo_messaging/tests/test_utils.py @@ -16,7 +16,7 @@ from oslo_messaging._drivers import common from oslo_messaging import _utils as utils from oslo_messaging.tests import utils as test_utils -from six.moves import mock +from unittest import mock class VersionIsCompatibleTestCase(test_utils.BaseTestCase): diff --git a/oslo_messaging/transport.py b/oslo_messaging/transport.py index 48979a64b..337fb69aa 100644 --- a/oslo_messaging/transport.py +++ b/oslo_messaging/transport.py @@ -21,9 +21,8 @@ import logging from debtcollector import removals from oslo_config import cfg -import six -from six.moves.urllib import parse from stevedore import driver +from urllib import parse from oslo_messaging import exceptions @@ -456,7 +455,7 @@ class TransportURL(object): conf.register_opts(_transport_opts) url = url or conf.transport_url - if not isinstance(url, six.string_types): + if not isinstance(url, str): raise InvalidTransportURL(url, 'Wrong URL type') url = parse.urlparse(url) diff --git a/requirements.txt b/requirements.txt index e8261a20d..cccb632c0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,6 @@ stevedore>=1.20.0 # Apache-2.0 debtcollector>=1.2.0 # Apache-2.0 # for jsonutils -six>=1.10.0 # MIT cachetools>=2.0.0 # MIT License WebOb>=1.7.1 # MIT diff --git a/test-requirements.txt b/test-requirements.txt index 766610509..8a7e62ce7 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -6,7 +6,6 @@ hacking>=3.0,<3.1.0 # Apache-2.0 fixtures>=3.0.0 # Apache-2.0/BSD -mock>=2.0.0 # BSD stestr>=2.0.0 # Apache-2.0 testscenarios>=0.4 # Apache-2.0/BSD testtools>=2.2.0 # MIT diff --git a/tools/simulator.py b/tools/simulator.py index fd4461ddd..ab2529b62 100755 --- a/tools/simulator.py +++ b/tools/simulator.py @@ -23,7 +23,6 @@ import logging import os import random import signal -import six import socket import string import sys @@ -139,7 +138,7 @@ class MessageStatsCollector(object): max_latency = 0 sum_latencies = 0 - for i in six.moves.range(count): + for i in range(count): p = self.buffer[i] size += len(p.cargo) @@ -471,10 +470,10 @@ def generate_messages(messages_count): messages_count = MESSAGES_LIMIT LOG.info("Generating %d random messages", messages_count) generator = init_random_generator() - for i in six.moves.range(messages_count): + for i in range(messages_count): length = generator() msg = ''.join(random.choice( - string.ascii_lowercase) for x in six.moves.range(length)) + string.ascii_lowercase) for x in range(length)) MESSAGES.append(msg) LOG.info("Messages has been prepared") @@ -533,7 +532,7 @@ def spawn_rpc_clients(threads, transport, targets, wait_after_msg, timeout, p = eventlet.GreenPool(size=threads) targets = itertools.cycle(targets) - for i in six.moves.range(threads): + for i in range(threads): target = next(targets) LOG.debug("starting RPC client for target %s", target) client_builder = functools.partial(RPCClient, i, transport, target, @@ -548,7 +547,7 @@ def spawn_rpc_clients(threads, transport, targets, wait_after_msg, timeout, def spawn_notify_clients(threads, topic, transport, message_count, wait_after_msg, timeout, duration): p = eventlet.GreenPool(size=threads) - for i in six.moves.range(threads): + for i in range(threads): client_builder = functools.partial(NotifyClient, i, transport, [topic], wait_after_msg) p.spawn_n(send_messages, i, client_builder, message_count, duration) @@ -574,7 +573,7 @@ def send_messages(client_id, client_builder, messages_count, duration): else: LOG.debug("Sending %d messages using client %d", messages_count, client_id) - for _ in six.moves.range(messages_count): + for _ in range(messages_count): client.send_msg() eventlet.sleep() if not IS_RUNNING: diff --git a/tox.ini b/tox.ini index 309ef234f..9646cb274 100644 --- a/tox.ini +++ b/tox.ini @@ -101,12 +101,10 @@ exclude = .tox,dist,doc,*.egg,build,__init__.py [hacking] import_exceptions = - six.moves [flake8:local-plugins] extension = O321 = checks:check_oslo_namespace_imports - O322 = checks:check_mock_imports O324 = checks:CheckForLoggingIssues paths = ./oslo_messaging/hacking