summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavanum Srinivas <davanum@gmail.com>2015-06-10 08:26:24 -0400
committerDavanum Srinivas (dims) <davanum@gmail.com>2015-06-15 20:40:16 +0000
commit2233675941c075c77208ecf379fc439c87d6fc5b (patch)
treeaf0b4dce31209bf8482d08a196d33f19b44b1be5
parent4ad4c07d6f00c0f76e3a11a58c2d1d94780a1bca (diff)
downloadnova-2233675941c075c77208ecf379fc439c87d6fc5b.tar.gz
Remove openstack/common/versionutils module
Since versionutils has graduated, switch to the is_compatible in oslo_utils.versionutils.py Depends-On: I1c8fbe857fa7d30d7c74cd7b0e187cc9a2305882 Change-Id: Id0e483c662231f678bddff7ddf77cdb0b0e1a5db
-rw-r--r--nova/api/auth.py2
-rw-r--r--nova/api/ec2/cloud.py2
-rw-r--r--nova/objects/base.py2
-rw-r--r--nova/objectstore/s3server.py2
-rw-r--r--nova/openstack/common/versionutils.py262
-rw-r--r--nova/tests/unit/api/ec2/test_api.py2
-rw-r--r--nova/virt/vmwareapi/driver.py2
-rw-r--r--nova/virt/xenapi/client/session.py2
-rw-r--r--nova/virt/xenapi/vm_utils.py2
9 files changed, 8 insertions, 270 deletions
diff --git a/nova/api/auth.py b/nova/api/auth.py
index d0c4b1ed79..4b2e251b9b 100644
--- a/nova/api/auth.py
+++ b/nova/api/auth.py
@@ -18,6 +18,7 @@ Common Auth Middleware.
from oslo_config import cfg
from oslo_log import log as logging
+from oslo_log import versionutils
from oslo_middleware import request_id
from oslo_serialization import jsonutils
import webob.dec
@@ -25,7 +26,6 @@ import webob.exc
from nova import context
from nova.i18n import _
-from nova.openstack.common import versionutils
from nova import wsgi
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index d66251fa2f..362a45a7ce 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -25,6 +25,7 @@ import time
from oslo_config import cfg
from oslo_log import log as logging
+from oslo_log import versionutils
from oslo_utils import timeutils
import six
@@ -48,7 +49,6 @@ from nova import network
from nova.network.security_group import neutron_driver
from nova.network.security_group import openstack_driver
from nova import objects
-from nova.openstack.common import versionutils
from nova import quota
from nova import servicegroup
from nova import utils
diff --git a/nova/objects/base.py b/nova/objects/base.py
index 3e6592cc19..e95d450c6a 100644
--- a/nova/objects/base.py
+++ b/nova/objects/base.py
@@ -24,6 +24,7 @@ import netaddr
from oslo_log import log as logging
import oslo_messaging as messaging
from oslo_utils import timeutils
+from oslo_utils import versionutils
from oslo_versionedobjects import base as ovoo_base
import six
@@ -32,7 +33,6 @@ from nova import exception
from nova.i18n import _, _LE
from nova import objects
from nova.objects import fields as obj_fields
-from nova.openstack.common import versionutils
from nova import utils
diff --git a/nova/objectstore/s3server.py b/nova/objectstore/s3server.py
index f5484be313..85fd8614f3 100644
--- a/nova/objectstore/s3server.py
+++ b/nova/objectstore/s3server.py
@@ -40,13 +40,13 @@ import urllib
from oslo_config import cfg
from oslo_log import log as logging
+from oslo_log import versionutils
import routes
import six
import webob
from nova.i18n import _LW
from nova.openstack.common import fileutils
-from nova.openstack.common import versionutils
from nova import paths
from nova import utils
from nova import wsgi
diff --git a/nova/openstack/common/versionutils.py b/nova/openstack/common/versionutils.py
deleted file mode 100644
index 30f92b32a6..0000000000
--- a/nova/openstack/common/versionutils.py
+++ /dev/null
@@ -1,262 +0,0 @@
-# Copyright (c) 2013 OpenStack Foundation
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-"""
-Helpers for comparing version strings.
-"""
-
-import copy
-import functools
-import inspect
-import logging
-
-from oslo_config import cfg
-import pkg_resources
-import six
-
-from nova.openstack.common._i18n import _
-
-
-LOG = logging.getLogger(__name__)
-CONF = cfg.CONF
-
-
-deprecated_opts = [
- cfg.BoolOpt('fatal_deprecations',
- default=False,
- help='Enables or disables fatal status of deprecations.'),
-]
-
-
-def list_opts():
- """Entry point for oslo.config-generator.
- """
- return [(None, copy.deepcopy(deprecated_opts))]
-
-
-class deprecated(object):
- """A decorator to mark callables as deprecated.
-
- This decorator logs a deprecation message when the callable it decorates is
- used. The message will include the release where the callable was
- deprecated, the release where it may be removed and possibly an optional
- replacement.
-
- Examples:
-
- 1. Specifying the required deprecated release
-
- >>> @deprecated(as_of=deprecated.ICEHOUSE)
- ... def a(): pass
-
- 2. Specifying a replacement:
-
- >>> @deprecated(as_of=deprecated.ICEHOUSE, in_favor_of='f()')
- ... def b(): pass
-
- 3. Specifying the release where the functionality may be removed:
-
- >>> @deprecated(as_of=deprecated.ICEHOUSE, remove_in=+1)
- ... def c(): pass
-
- 4. Specifying the deprecated functionality will not be removed:
- >>> @deprecated(as_of=deprecated.ICEHOUSE, remove_in=0)
- ... def d(): pass
-
- 5. Specifying a replacement, deprecated functionality will not be removed:
- >>> @deprecated(as_of=deprecated.ICEHOUSE, in_favor_of='f()', remove_in=0)
- ... def e(): pass
-
- """
-
- # NOTE(morganfainberg): Bexar is used for unit test purposes, it is
- # expected we maintain a gap between Bexar and Folsom in this list.
- BEXAR = 'B'
- FOLSOM = 'F'
- GRIZZLY = 'G'
- HAVANA = 'H'
- ICEHOUSE = 'I'
- JUNO = 'J'
- KILO = 'K'
- LIBERTY = 'L'
-
- _RELEASES = {
- # NOTE(morganfainberg): Bexar is used for unit test purposes, it is
- # expected we maintain a gap between Bexar and Folsom in this list.
- 'B': 'Bexar',
- 'F': 'Folsom',
- 'G': 'Grizzly',
- 'H': 'Havana',
- 'I': 'Icehouse',
- 'J': 'Juno',
- 'K': 'Kilo',
- 'L': 'Liberty',
- }
-
- _deprecated_msg_with_alternative = _(
- '%(what)s is deprecated as of %(as_of)s in favor of '
- '%(in_favor_of)s and may be removed in %(remove_in)s.')
-
- _deprecated_msg_no_alternative = _(
- '%(what)s is deprecated as of %(as_of)s and may be '
- 'removed in %(remove_in)s. It will not be superseded.')
-
- _deprecated_msg_with_alternative_no_removal = _(
- '%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s.')
-
- _deprecated_msg_with_no_alternative_no_removal = _(
- '%(what)s is deprecated as of %(as_of)s. It will not be superseded.')
-
- def __init__(self, as_of, in_favor_of=None, remove_in=2, what=None):
- """Initialize decorator
-
- :param as_of: the release deprecating the callable. Constants
- are define in this class for convenience.
- :param in_favor_of: the replacement for the callable (optional)
- :param remove_in: an integer specifying how many releases to wait
- before removing (default: 2)
- :param what: name of the thing being deprecated (default: the
- callable's name)
-
- """
- self.as_of = as_of
- self.in_favor_of = in_favor_of
- self.remove_in = remove_in
- self.what = what
-
- def __call__(self, func_or_cls):
- if not self.what:
- self.what = func_or_cls.__name__ + '()'
- msg, details = self._build_message()
-
- if inspect.isfunction(func_or_cls):
-
- @six.wraps(func_or_cls)
- def wrapped(*args, **kwargs):
- report_deprecated_feature(LOG, msg, details)
- return func_or_cls(*args, **kwargs)
- return wrapped
- elif inspect.isclass(func_or_cls):
- orig_init = func_or_cls.__init__
-
- # TODO(tsufiev): change `functools` module to `six` as
- # soon as six 1.7.4 (with fix for passing `assigned`
- # argument to underlying `functools.wraps`) is released
- # and added to the oslo-incubator requrements
- @functools.wraps(orig_init, assigned=('__name__', '__doc__'))
- def new_init(self, *args, **kwargs):
- report_deprecated_feature(LOG, msg, details)
- orig_init(self, *args, **kwargs)
- func_or_cls.__init__ = new_init
- return func_or_cls
- else:
- raise TypeError('deprecated can be used only with functions or '
- 'classes')
-
- def _get_safe_to_remove_release(self, release):
- # TODO(dstanek): this method will have to be reimplemented once
- # when we get to the X release because once we get to the Y
- # release, what is Y+2?
- new_release = chr(ord(release) + self.remove_in)
- if new_release in self._RELEASES:
- return self._RELEASES[new_release]
- else:
- return new_release
-
- def _build_message(self):
- details = dict(what=self.what,
- as_of=self._RELEASES[self.as_of],
- remove_in=self._get_safe_to_remove_release(self.as_of))
-
- if self.in_favor_of:
- details['in_favor_of'] = self.in_favor_of
- if self.remove_in > 0:
- msg = self._deprecated_msg_with_alternative
- else:
- # There are no plans to remove this function, but it is
- # now deprecated.
- msg = self._deprecated_msg_with_alternative_no_removal
- else:
- if self.remove_in > 0:
- msg = self._deprecated_msg_no_alternative
- else:
- # There are no plans to remove this function, but it is
- # now deprecated.
- msg = self._deprecated_msg_with_no_alternative_no_removal
- return msg, details
-
-
-def is_compatible(requested_version, current_version, same_major=True):
- """Determine whether `requested_version` is satisfied by
- `current_version`; in other words, `current_version` is >=
- `requested_version`.
-
- :param requested_version: version to check for compatibility
- :param current_version: version to check against
- :param same_major: if True, the major version must be identical between
- `requested_version` and `current_version`. This is used when a
- major-version difference indicates incompatibility between the two
- versions. Since this is the common-case in practice, the default is
- True.
- :returns: True if compatible, False if not
- """
- requested_parts = pkg_resources.parse_version(requested_version)
- current_parts = pkg_resources.parse_version(current_version)
-
- if same_major and (requested_parts[0] != current_parts[0]):
- return False
-
- return current_parts >= requested_parts
-
-
-# Track the messages we have sent already. See
-# report_deprecated_feature().
-_deprecated_messages_sent = {}
-
-
-def report_deprecated_feature(logger, msg, *args, **kwargs):
- """Call this function when a deprecated feature is used.
-
- If the system is configured for fatal deprecations then the message
- is logged at the 'critical' level and :class:`DeprecatedConfig` will
- be raised.
-
- Otherwise, the message will be logged (once) at the 'warn' level.
-
- :raises: :class:`DeprecatedConfig` if the system is configured for
- fatal deprecations.
- """
- stdmsg = _("Deprecated: %s") % msg
- CONF.register_opts(deprecated_opts)
- if CONF.fatal_deprecations:
- logger.critical(stdmsg, *args, **kwargs)
- raise DeprecatedConfig(msg=stdmsg)
-
- # Using a list because a tuple with dict can't be stored in a set.
- sent_args = _deprecated_messages_sent.setdefault(msg, list())
-
- if args in sent_args:
- # Already logged this message, so don't log it again.
- return
-
- sent_args.append(args)
- logger.warn(stdmsg, *args, **kwargs)
-
-
-class DeprecatedConfig(Exception):
- message = _("Fatal call to deprecated config: %(msg)s")
-
- def __init__(self, msg):
- super(Exception, self).__init__(self.message % dict(msg=msg))
diff --git a/nova/tests/unit/api/ec2/test_api.py b/nova/tests/unit/api/ec2/test_api.py
index 0b6fcdaf8c..1ee3f52698 100644
--- a/nova/tests/unit/api/ec2/test_api.py
+++ b/nova/tests/unit/api/ec2/test_api.py
@@ -30,6 +30,7 @@ if hasattr(boto.connection, 'HTTPResponse'):
else:
import httplib
import fixtures
+from oslo_utils import versionutils
import webob
from nova.api import auth
@@ -38,7 +39,6 @@ from nova.api.ec2 import ec2utils
from nova import block_device
from nova import context
from nova import exception
-from nova.openstack.common import versionutils
from nova import test
from nova.tests.unit import matchers
diff --git a/nova/virt/vmwareapi/driver.py b/nova/virt/vmwareapi/driver.py
index 20003c86d4..139fee0a89 100644
--- a/nova/virt/vmwareapi/driver.py
+++ b/nova/virt/vmwareapi/driver.py
@@ -23,6 +23,7 @@ import re
from oslo_config import cfg
from oslo_log import log as logging
+from oslo_log import versionutils
from oslo_serialization import jsonutils
from oslo_vmware import api
from oslo_vmware import exceptions as vexc
@@ -34,7 +35,6 @@ import six
from nova import exception
from nova import utils
from nova.i18n import _, _LI, _LW
-from nova.openstack.common import versionutils
from nova.virt import driver
from nova.virt.vmwareapi import constants
from nova.virt.vmwareapi import error_util
diff --git a/nova/virt/xenapi/client/session.py b/nova/virt/xenapi/client/session.py
index 5cb5ac4b80..4ca1875a10 100644
--- a/nova/virt/xenapi/client/session.py
+++ b/nova/virt/xenapi/client/session.py
@@ -23,13 +23,13 @@ from eventlet import queue
from eventlet import timeout
from oslo_config import cfg
from oslo_log import log as logging
+from oslo_utils import versionutils
from six.moves import range
from nova import context
from nova import exception
from nova.i18n import _, _LE, _LW
from nova import objects
-from nova.openstack.common import versionutils
from nova import utils
from nova import version
from nova.virt.xenapi.client import objects as cli_objects
diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py
index 9a36d1013d..98c3c3a3b5 100644
--- a/nova/virt/xenapi/vm_utils.py
+++ b/nova/virt/xenapi/vm_utils.py
@@ -36,6 +36,7 @@ from oslo_utils import importutils
from oslo_utils import strutils
from oslo_utils import timeutils
from oslo_utils import units
+from oslo_utils import versionutils
import six
from six.moves import range
import six.moves.urllib.parse as urlparse
@@ -47,7 +48,6 @@ from nova.compute import vm_mode
from nova import exception
from nova.i18n import _, _LE, _LI, _LW
from nova.network import model as network_model
-from nova.openstack.common import versionutils
from nova import utils
from nova.virt import configdrive
from nova.virt import diagnostics