summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Peuch <cortex@worlddomination.be>2020-05-22 16:51:56 +0200
committerLaurent Peuch <cortex@worlddomination.be>2020-05-22 16:51:56 +0200
commit58581cb71b2711a0656639e5b75281dd6a1f54c3 (patch)
treee25d6061f8a278b3a21faafa865a671c4fcc4ecf
parent0d0d2eca1cfbdd05ee9ba5a2a6158be8ba262e30 (diff)
downloadlogilab-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.
-rw-r--r--logilab/common/deprecation.py50
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):