diff --git a/openstack/common/apiclient/auth.py b/openstack/common/apiclient/auth.py index 17442286f..d753d36b7 100644 --- a/openstack/common/apiclient/auth.py +++ b/openstack/common/apiclient/auth.py @@ -23,6 +23,7 @@ import argparse import logging import os +import six from stevedore import extension @@ -102,6 +103,7 @@ def load_plugin_from_args(args): raise exceptions.AuthPluginOptionsMissing(["auth_system"]) +@six.add_metaclass(abc.ABCMeta) class BaseAuthPlugin(object): """Base class for authentication plugins. @@ -109,8 +111,6 @@ class BaseAuthPlugin(object): method to be a valid plugin. """ - __metaclass__ = abc.ABCMeta - auth_system = None opt_names = [] common_opt_names = [ diff --git a/openstack/common/apiclient/base.py b/openstack/common/apiclient/base.py index d4917626d..85682d4c0 100644 --- a/openstack/common/apiclient/base.py +++ b/openstack/common/apiclient/base.py @@ -26,6 +26,7 @@ # pylint: disable=E1102 import abc +import six import urllib from openstack.common.apiclient import exceptions @@ -201,11 +202,10 @@ def _delete(self, url): return self.client.delete(url) +@six.add_metaclass(abc.ABCMeta) class ManagerWithFind(BaseManager): """Manager with additional `find()`/`findall()` methods.""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod def list(self): pass diff --git a/openstack/common/periodic_task.py b/openstack/common/periodic_task.py index 887552cbf..1b10adb5d 100644 --- a/openstack/common/periodic_task.py +++ b/openstack/common/periodic_task.py @@ -14,6 +14,7 @@ # under the License. import datetime +import six import time from oslo.config import cfg @@ -150,8 +151,8 @@ def __init__(cls, names, bases, dict_): cls._periodic_last_run[name] = task._periodic_last_run +@six.add_metaclass(_PeriodicTasksMeta) class PeriodicTasks(object): - __metaclass__ = _PeriodicTasksMeta def run_periodic_tasks(self, context, raise_on_error=False): """Tasks to be run at a periodic interval.""" diff --git a/openstack/common/policy.py b/openstack/common/policy.py index 986a5971d..4f5663008 100644 --- a/openstack/common/policy.py +++ b/openstack/common/policy.py @@ -279,11 +279,10 @@ def enforce(self, rule, target, creds, do_raise=False, return result +@six.add_metaclass(abc.ABCMeta) class BaseCheck(object): """Abstract base class for Check classes.""" - __metaclass__ = abc.ABCMeta - @abc.abstractmethod def __str__(self): """String representation of the Check tree rooted at this node.""" @@ -626,6 +625,7 @@ def decorator(func): return decorator +@six.add_metaclass(ParseStateMeta) class ParseState(object): """Implement the core of parsing the policy language. @@ -638,8 +638,6 @@ class ParseState(object): shouldn't be that big a problem. """ - __metaclass__ = ParseStateMeta - def __init__(self): """Initialize the ParseState.""" diff --git a/openstack/common/rpc/serializer.py b/openstack/common/rpc/serializer.py index 76c683103..5fd346d65 100644 --- a/openstack/common/rpc/serializer.py +++ b/openstack/common/rpc/serializer.py @@ -15,11 +15,12 @@ """Provides the definition of an RPC serialization handler""" import abc +import six +@six.add_metaclass(abc.ABCMeta) class Serializer(object): """Generic (de-)serialization definition base class.""" - __metaclass__ = abc.ABCMeta @abc.abstractmethod def serialize_entity(self, context, entity): diff --git a/requirements.txt b/requirements.txt index 6cdc41a8f..a7ddbecfb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,7 @@ stevedore>=0.10 sqlalchemy-migrate>=0.7.2 SQLAlchemy>=0.7.8,<=0.7.99 qpid-python -six +six>=1.4.1 netaddr pycrypto>=2.6 Babel>=0.9.6 diff --git a/tests/unit/test_periodic.py b/tests/unit/test_periodic.py index f2a5a5435..fae8c3b9c 100644 --- a/tests/unit/test_periodic.py +++ b/tests/unit/test_periodic.py @@ -82,7 +82,6 @@ class ManagerMetaTestCase(test.BaseTestCase): def test_meta(self): class Manager(periodic_task.PeriodicTasks): - __metaclass__ = periodic_task._PeriodicTasksMeta @periodic_task.periodic_task def foo(self): @@ -112,7 +111,6 @@ def setUp(self): def test_periodic_tasks_with_idle(self): class Manager(periodic_task.PeriodicTasks): - __metaclass__ = periodic_task._PeriodicTasksMeta @periodic_task.periodic_task(spacing=200) def bar(self): @@ -128,7 +126,6 @@ def bar(self): def test_periodic_tasks_constant(self): class Manager(periodic_task.PeriodicTasks): - __metaclass__ = periodic_task._PeriodicTasksMeta @periodic_task.periodic_task(spacing=0) def bar(self): @@ -143,7 +140,6 @@ def test_periodic_tasks_idle_calculation(self): timeutils.set_time_override(fake_time) class Manager(periodic_task.PeriodicTasks): - __metaclass__ = periodic_task._PeriodicTasksMeta @periodic_task.periodic_task(spacing=10) def bar(self, context): @@ -179,7 +175,6 @@ def test_periodic_tasks_immediate_runs_now(self): timeutils.set_time_override(fake_time) class Manager(periodic_task.PeriodicTasks): - __metaclass__ = periodic_task._PeriodicTasksMeta @periodic_task.periodic_task(spacing=10, run_immediately=True) def bar(self, context): @@ -214,7 +209,6 @@ def bar(self, context): def test_periodic_tasks_disabled(self): class Manager(periodic_task.PeriodicTasks): - __metaclass__ = periodic_task._PeriodicTasksMeta @periodic_task.periodic_task(spacing=-1) def bar(self): @@ -228,7 +222,6 @@ def test_external_running_here(self): self.config(run_external_periodic_tasks=True) class Manager(periodic_task.PeriodicTasks): - __metaclass__ = periodic_task._PeriodicTasksMeta @periodic_task.periodic_task(spacing=200, external_process_ok=True) def bar(self): @@ -241,7 +234,6 @@ def test_external_running_elsewhere(self): self.config(run_external_periodic_tasks=False) class Manager(periodic_task.PeriodicTasks): - __metaclass__ = periodic_task._PeriodicTasksMeta @periodic_task.periodic_task(spacing=200, external_process_ok=True) def bar(self): diff --git a/tests/unit/test_policy.py b/tests/unit/test_policy.py index d6de1ca6f..bf4efaf4e 100644 --- a/tests/unit/test_policy.py +++ b/tests/unit/test_policy.py @@ -552,8 +552,8 @@ def spam(): self.assertEqual(spam.reducers, [['d', 'e', 'f'], ['a', 'b', 'c']]) def test_parse_state_meta(self): + @six.add_metaclass(policy.ParseStateMeta) class FakeState(object): - __metaclass__ = policy.ParseStateMeta @policy.reducer('a', 'b', 'c') @policy.reducer('d', 'e', 'f')