diff options
-rw-r--r-- | logilab/common/deprecation.py | 52 |
1 files changed, 17 insertions, 35 deletions
diff --git a/logilab/common/deprecation.py b/logilab/common/deprecation.py index a6f448f..5dc23f7 100644 --- a/logilab/common/deprecation.py +++ b/logilab/common/deprecation.py @@ -177,41 +177,23 @@ def callable_deprecated(reason=None, version=None, stacklevel=2): deprecated = callable_renamed(old_name="deprecated", new_function=callable_deprecated) -def class_deprecated(old_name, parents, class_dict): - try: - return _class_deprecated(old_name, parents, clsdict) - except (NameError, TypeError): - # in case of conflicting metaclass situation - class DeprecatedClass(*parents): - def __init__(self, *args, **kwargs): - msg = class_dict.get("__deprecation_warning__", f"{old_name} is deprecated") - send_warning( - msg, - stacklevel=class_dict.get("__deprecation_warning_stacklevel__", 3), - version=class_dict.get("__deprecation_warning_version__", None), - module_name=class_dict.get( - "__deprecation_warning_module_name__", _get_module_name(1) - ), - ) - super(DeprecatedClass, self).__init__(*args, **kwargs) - - return DeprecatedClass - - -class _class_deprecated(type): - """metaclass to print a warning on instantiation of a deprecated class""" - - def __call__(cls, *args, **kwargs): - msg = getattr(cls, "__deprecation_warning__", "%(cls)s is deprecated") % { - "cls": cls.__name__ - } - send_warning( - msg, - stacklevel=getattr(cls, "__deprecation_warning_stacklevel__", 3), - version=getattr(cls, "__deprecation_warning_version__", None), - module_name=getattr(cls, "__deprecation_warning_module_name__", cls.__module__), - ) - return type.__call__(cls, *args, **kwargs) +def class_deprecated(old_name, parent, class_dict): + class DeprecatedClass(*parent): + def __init__(self, *args, **kwargs): + msg = class_dict.get("__deprecation_warning__", f"{old_name} is deprecated") + send_warning( + msg, + stacklevel=class_dict.get("__deprecation_warning_stacklevel__", 3), + version=class_dict.get("__deprecation_warning_version__", None), + module_name=class_dict.get( + "__deprecation_warning_module_name__", _get_module_name(1) + ), + ) + super(DeprecatedClass, self).__init__(*args, **kwargs) + + DeprecatedClass.__name__ = old_name + + return DeprecatedClass def attribute_renamed(old_name, new_name, version=None): |