diff options
author | Laurent Peuch <cortex@worlddomination.be> | 2020-05-22 16:51:56 +0200 |
---|---|---|
committer | Laurent Peuch <cortex@worlddomination.be> | 2020-05-22 16:51:56 +0200 |
commit | 58581cb71b2711a0656639e5b75281dd6a1f54c3 (patch) | |
tree | e25d6061f8a278b3a21faafa865a671c4fcc4ecf /logilab/common | |
parent | 0d0d2eca1cfbdd05ee9ba5a2a6158be8ba262e30 (diff) | |
download | logilab-common-58581cb71b2711a0656639e5b75281dd6a1f54c3.tar.gz |
[deprecation/fix] rollback to old class_deprecation being a class behavior
It breaks CW because CW was using class_deprecated in a isinstance to select
the good views to uses.
Diffstat (limited to 'logilab/common')
-rw-r--r-- | logilab/common/deprecation.py | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/logilab/common/deprecation.py b/logilab/common/deprecation.py index 6edc71c..3da3021 100644 --- a/logilab/common/deprecation.py +++ b/logilab/common/deprecation.py @@ -163,33 +163,21 @@ 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), - ) - super(DeprecatedClass, self).__init__(*args, **kwargs) +def _generate_class_deprecated(): + class _class_deprecated(type): + """metaclass to print a warning on instantiation of a deprecated class""" - return DeprecatedClass + def __call__(cls, *args, **kwargs): + message = getattr(cls, "__deprecation_warning__", + "%(cls)s is deprecated") % {'cls': cls.__name__} + send_warning(message, stacklevel=getattr(cls, "__deprecation_warning_stacklevel__", 4), + version=getattr(cls, "__deprecation_warning_version__", None)) + return type.__call__(cls, *args, **kwargs) + return _class_deprecated -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__", 4), - version=getattr(cls, "__deprecation_warning_version__", None)) - return type.__call__(cls, *args, **kwargs) +class_deprecated = _generate_class_deprecated() def attribute_renamed(old_name, new_name, version=None): @@ -318,7 +306,21 @@ def class_renamed(old_name, new_class, message=None, version=None): class_dict['__deprecation_warning_version__'] = version class_dict['__deprecation_warning_stacklevel__'] = 5 - return class_deprecated(old_name, (new_class,), class_dict) + try: + return class_deprecated(old_name, (new_class,), class_dict) + except (NameError, TypeError): + # in case of conflicting metaclass situation + class DeprecatedClass(new_class): + 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), + ) + super(DeprecatedClass, self).__init__(*args, **kwargs) + + return DeprecatedClass def class_moved(new_class, old_name=None, message=None, version=None): |