summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Peuch <cortex@worlddomination.be>2020-04-23 03:33:13 +0200
committerLaurent Peuch <cortex@worlddomination.be>2020-04-23 03:33:13 +0200
commit30916daafb7eca535abd07028a1a570c90b27443 (patch)
tree10cd429d735735da505abafae2b963f74a5739a1
parent290dd7e63ba63159aaba69675c2a23819745eb92 (diff)
downloadlogilab-common-30916daafb7eca535abd07028a1a570c90b27443.tar.gz
[deprecation/refactoring] simplify class_renamed
-rw-r--r--logilab/common/deprecation.py16
-rw-r--r--test/unittest_deprecation.py10
2 files changed, 23 insertions, 3 deletions
diff --git a/logilab/common/deprecation.py b/logilab/common/deprecation.py
index 4da111b..5b2d28d 100644
--- a/logilab/common/deprecation.py
+++ b/logilab/common/deprecation.py
@@ -279,7 +279,8 @@ class class_deprecated(type):
def __call__(cls, *args, **kwargs):
msg = getattr(cls, "__deprecation_warning__",
"%(cls)s is deprecated") % {'cls': cls.__name__}
- send_warning(msg, stacklevel=4)
+ send_warning(msg, stacklevel=getattr(cls, "__deprecation_warning_stacklevel__", 4),
+ version=getattr(cls, "__deprecation_warning_version__", None))
return type.__call__(cls, *args, **kwargs)
@@ -407,7 +408,7 @@ def renamed(old_name, new_function, version=None):
return wrapped
-def class_renamed(old_name, new_class, message=None):
+def class_renamed(old_name, new_class, message=None, version=None):
"""automatically creates a class which fires a DeprecationWarning
when instantiated.
@@ -417,7 +418,16 @@ def class_renamed(old_name, new_class, message=None):
s = Set()
>>>
"""
- return _defaultdeprecator.class_renamed(None, old_name, new_class, message)
+ class_dict = {}
+ if message is None:
+ message = '%s is deprecated, use %s instead' % (old_name, new_class.__name__)
+
+ class_dict['__deprecation_warning__'] = message
+ class_dict['__deprecation_warning_version__'] = version
+ class_dict['__deprecation_warning_stacklevel__'] = 5
+
+ return class_deprecated(old_name, (new_class,), class_dict)
+
def class_moved(new_class, old_name=None, message=None):
return _defaultdeprecator.class_moved(None, new_class, old_name, message)
diff --git a/test/unittest_deprecation.py b/test/unittest_deprecation.py
index 50fbbb9..eb75444 100644
--- a/test/unittest_deprecation.py
+++ b/test/unittest_deprecation.py
@@ -51,6 +51,16 @@ class RawInputTC(TestCase):
self.assertEqual(self.messages,
['[logilab.common] AnyClass is deprecated'])
+ def test_class_renamed(self):
+ class AnyClass(object):
+ pass
+
+ OldClass = deprecation.class_renamed("OldClass", AnyClass)
+
+ OldClass()
+ self.assertEqual(self.messages,
+ ['[logilab.common] OldClass is deprecated, use AnyClass instead'])
+
def test_deprecated_func(self):
any_func = deprecation.deprecated()(self.mk_func())
any_func()