From 30916daafb7eca535abd07028a1a570c90b27443 Mon Sep 17 00:00:00 2001 From: Laurent Peuch Date: Thu, 23 Apr 2020 03:33:13 +0200 Subject: [deprecation/refactoring] simplify class_renamed --- logilab/common/deprecation.py | 16 +++++++++++++--- test/unittest_deprecation.py | 10 ++++++++++ 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() -- cgit v1.2.1