Merge "Use the deprecation utility module instead of warnings"
This commit is contained in:
@@ -15,7 +15,6 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import contextlib
|
import contextlib
|
||||||
import warnings
|
|
||||||
|
|
||||||
from oslo.utils import importutils
|
from oslo.utils import importutils
|
||||||
import six
|
import six
|
||||||
@@ -23,6 +22,7 @@ import stevedore.driver
|
|||||||
|
|
||||||
from taskflow import exceptions as exc
|
from taskflow import exceptions as exc
|
||||||
from taskflow.persistence import backends as p_backends
|
from taskflow.persistence import backends as p_backends
|
||||||
|
from taskflow.utils import deprecation
|
||||||
from taskflow.utils import misc
|
from taskflow.utils import misc
|
||||||
from taskflow.utils import persistence_utils as p_utils
|
from taskflow.utils import persistence_utils as p_utils
|
||||||
from taskflow.utils import reflection
|
from taskflow.utils import reflection
|
||||||
@@ -35,16 +35,19 @@ ENGINES_NAMESPACE = 'taskflow.engines'
|
|||||||
ENGINE_DEFAULT = 'default'
|
ENGINE_DEFAULT = 'default'
|
||||||
|
|
||||||
|
|
||||||
|
@deprecation.renamed_kwarg('engine_conf', 'engine',
|
||||||
|
version="0.6", removal_version="?",
|
||||||
|
# This is set to none since this function is called
|
||||||
|
# from 2 other functions in this module, both of
|
||||||
|
# which have different stack levels, possibly we
|
||||||
|
# can fix this in the future...
|
||||||
|
stacklevel=None)
|
||||||
def _extract_engine(**kwargs):
|
def _extract_engine(**kwargs):
|
||||||
"""Extracts the engine kind and any associated options."""
|
"""Extracts the engine kind and any associated options."""
|
||||||
options = {}
|
options = {}
|
||||||
kind = kwargs.pop('engine', None)
|
kind = kwargs.pop('engine', None)
|
||||||
engine_conf = kwargs.pop('engine_conf', None)
|
engine_conf = kwargs.pop('engine_conf', None)
|
||||||
if engine_conf is not None:
|
if engine_conf is not None:
|
||||||
warnings.warn("Using the 'engine_conf' argument is"
|
|
||||||
" deprecated and will be removed in a future version,"
|
|
||||||
" please use the 'engine' argument instead.",
|
|
||||||
DeprecationWarning)
|
|
||||||
if isinstance(engine_conf, six.string_types):
|
if isinstance(engine_conf, six.string_types):
|
||||||
kind = engine_conf
|
kind = engine_conf
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -21,10 +21,34 @@ import six
|
|||||||
|
|
||||||
from taskflow.utils import reflection
|
from taskflow.utils import reflection
|
||||||
|
|
||||||
|
_CLASS_MOVED_PREFIX_TPL = "Class '%s' has moved to '%s'"
|
||||||
|
_KIND_MOVED_PREFIX_TPL = "%s '%s' has moved to '%s'"
|
||||||
|
_KWARG_MOVED_POSTFIX_TPL = ", please use the '%s' argument instead"
|
||||||
|
_KWARG_MOVED_PREFIX_TPL = "Using the '%s' argument is deprecated"
|
||||||
|
|
||||||
def deprecation(message, stacklevel=2):
|
|
||||||
"""Warns about some type of deprecation that has been made."""
|
def deprecation(message, stacklevel=None):
|
||||||
warnings.warn(message, category=DeprecationWarning, stacklevel=stacklevel)
|
"""Warns about some type of deprecation that has been (or will be) made.
|
||||||
|
|
||||||
|
This helper function makes it easier to interact with the warnings module
|
||||||
|
by standardizing the arguments that the warning function recieves so that
|
||||||
|
it is easier to use.
|
||||||
|
|
||||||
|
This should be used to emit warnings to users (users can easily turn these
|
||||||
|
warnings off/on, see https://docs.python.org/2/library/warnings.html
|
||||||
|
as they see fit so that the messages do not fill up the users logs with
|
||||||
|
warnings that they do not wish to see in production) about functions,
|
||||||
|
methods, attributes or other code that is deprecated and will be removed
|
||||||
|
in a future release (this is done using these warnings to avoid breaking
|
||||||
|
existing users of those functions, methods, code; which a library should
|
||||||
|
avoid doing by always giving at *least* N + 1 release for users to address
|
||||||
|
the deprecation warnings).
|
||||||
|
"""
|
||||||
|
if stacklevel is None:
|
||||||
|
warnings.warn(message, category=DeprecationWarning)
|
||||||
|
else:
|
||||||
|
warnings.warn(message,
|
||||||
|
category=DeprecationWarning, stacklevel=stacklevel)
|
||||||
|
|
||||||
|
|
||||||
# Helper accessors for the moved proxy (since it will not have easy access
|
# Helper accessors for the moved proxy (since it will not have easy access
|
||||||
@@ -66,18 +90,18 @@ class MovedClassProxy(object):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def __instancecheck__(self, instance):
|
def __instancecheck__(self, instance):
|
||||||
deprecation(
|
deprecation(_getattr(self, '__message__'),
|
||||||
_getattr(self, '__message__'), _getattr(self, '__stacklevel__'))
|
stacklevel=_getattr(self, '__stacklevel__'))
|
||||||
return isinstance(instance, _getattr(self, '__wrapped__'))
|
return isinstance(instance, _getattr(self, '__wrapped__'))
|
||||||
|
|
||||||
def __subclasscheck__(self, instance):
|
def __subclasscheck__(self, instance):
|
||||||
deprecation(
|
deprecation(_getattr(self, '__message__'),
|
||||||
_getattr(self, '__message__'), _getattr(self, '__stacklevel__'))
|
stacklevel=_getattr(self, '__stacklevel__'))
|
||||||
return issubclass(instance, _getattr(self, '__wrapped__'))
|
return issubclass(instance, _getattr(self, '__wrapped__'))
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
deprecation(
|
deprecation(_getattr(self, '__message__'),
|
||||||
_getattr(self, '__message__'), _getattr(self, '__stacklevel__'))
|
stacklevel=_getattr(self, '__stacklevel__'))
|
||||||
return _getattr(self, '__wrapped__')(*args, **kwargs)
|
return _getattr(self, '__wrapped__')(*args, **kwargs)
|
||||||
|
|
||||||
def __getattribute__(self, name):
|
def __getattribute__(self, name):
|
||||||
@@ -95,11 +119,9 @@ class MovedClassProxy(object):
|
|||||||
type(self).__name__, id(self), wrapped, id(wrapped))
|
type(self).__name__, id(self), wrapped, id(wrapped))
|
||||||
|
|
||||||
|
|
||||||
def _generate_moved_message(kind, old_name, new_name,
|
def _generate_moved_message(prefix, postfix=None, message=None,
|
||||||
message=None, version=None, removal_version=None):
|
version=None, removal_version=None):
|
||||||
message_components = [
|
message_components = [prefix]
|
||||||
"%s '%s' has moved to '%s'" % (kind, old_name, new_name),
|
|
||||||
]
|
|
||||||
if version:
|
if version:
|
||||||
message_components.append(" in version '%s'" % version)
|
message_components.append(" in version '%s'" % version)
|
||||||
if removal_version:
|
if removal_version:
|
||||||
@@ -109,11 +131,36 @@ def _generate_moved_message(kind, old_name, new_name,
|
|||||||
else:
|
else:
|
||||||
message_components.append(" and will be removed in version '%s'"
|
message_components.append(" and will be removed in version '%s'"
|
||||||
% removal_version)
|
% removal_version)
|
||||||
|
if postfix:
|
||||||
|
message_components.append(postfix)
|
||||||
if message:
|
if message:
|
||||||
message_components.append(": %s" % message)
|
message_components.append(": %s" % message)
|
||||||
return ''.join(message_components)
|
return ''.join(message_components)
|
||||||
|
|
||||||
|
|
||||||
|
def renamed_kwarg(old_name, new_name, message=None,
|
||||||
|
version=None, removal_version=None, stacklevel=3):
|
||||||
|
"""Decorates a kwarg accepting function to deprecate a renamed kwarg."""
|
||||||
|
|
||||||
|
prefix = _KWARG_MOVED_PREFIX_TPL % old_name
|
||||||
|
postfix = _KWARG_MOVED_POSTFIX_TPL % new_name
|
||||||
|
out_message = _generate_moved_message(prefix, postfix=postfix,
|
||||||
|
message=message, version=version,
|
||||||
|
removal_version=removal_version)
|
||||||
|
|
||||||
|
def decorator(f):
|
||||||
|
|
||||||
|
@six.wraps(f)
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
if old_name in kwargs:
|
||||||
|
deprecation(out_message, stacklevel=stacklevel)
|
||||||
|
return f(*args, **kwargs)
|
||||||
|
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
|
||||||
def _moved_decorator(kind, new_attribute_name, message=None,
|
def _moved_decorator(kind, new_attribute_name, message=None,
|
||||||
version=None, removal_version=None):
|
version=None, removal_version=None):
|
||||||
"""Decorates a method/property that was moved to another location."""
|
"""Decorates a method/property that was moved to another location."""
|
||||||
@@ -134,10 +181,11 @@ def _moved_decorator(kind, new_attribute_name, message=None,
|
|||||||
else:
|
else:
|
||||||
old_name = ".".join((base_name, old_attribute_name))
|
old_name = ".".join((base_name, old_attribute_name))
|
||||||
new_name = ".".join((base_name, new_attribute_name))
|
new_name = ".".join((base_name, new_attribute_name))
|
||||||
|
prefix = _KIND_MOVED_PREFIX_TPL % (kind, old_name, new_name)
|
||||||
out_message = _generate_moved_message(
|
out_message = _generate_moved_message(
|
||||||
kind, old_name=old_name, new_name=new_name, message=message,
|
prefix, message=message,
|
||||||
version=version, removal_version=removal_version)
|
version=version, removal_version=removal_version)
|
||||||
deprecation(out_message, 3)
|
deprecation(out_message, stacklevel=3)
|
||||||
return f(self, *args, **kwargs)
|
return f(self, *args, **kwargs)
|
||||||
|
|
||||||
return wrapper
|
return wrapper
|
||||||
@@ -158,7 +206,8 @@ def moved_class(new_class, old_class_name, old_module_name, message=None,
|
|||||||
"""
|
"""
|
||||||
old_name = ".".join((old_module_name, old_class_name))
|
old_name = ".".join((old_module_name, old_class_name))
|
||||||
new_name = reflection.get_class_name(new_class)
|
new_name = reflection.get_class_name(new_class)
|
||||||
out_message = _generate_moved_message('Class', old_name, new_name,
|
prefix = _CLASS_MOVED_PREFIX_TPL % (old_name, new_name)
|
||||||
|
out_message = _generate_moved_message(prefix,
|
||||||
message=message, version=version,
|
message=message, version=version,
|
||||||
removal_version=removal_version)
|
removal_version=removal_version)
|
||||||
return MovedClassProxy(new_class, out_message, 3)
|
return MovedClassProxy(new_class, out_message, stacklevel=3)
|
||||||
|
|||||||
Reference in New Issue
Block a user