diff options
author | Laurent Peuch <cortex@worlddomination.be> | 2020-04-23 06:54:15 +0200 |
---|---|---|
committer | Laurent Peuch <cortex@worlddomination.be> | 2020-04-23 06:54:15 +0200 |
commit | 07c6393abb3389787d7e6b98809026da394222ac (patch) | |
tree | 69d5633b06d9c852b464755533594b2295c6c0a4 | |
parent | f502fe0496b292b433c6b2299698a180769c79c6 (diff) | |
download | logilab-common-07c6393abb3389787d7e6b98809026da394222ac.tar.gz |
[deprecation] use send_warning in attribute/argument_renamed, argument_removed and DeprecationWrapper
-rw-r--r-- | logilab/common/deprecation.py | 28 | ||||
-rw-r--r-- | test/unittest_deprecation.py | 6 |
2 files changed, 18 insertions, 16 deletions
diff --git a/logilab/common/deprecation.py b/logilab/common/deprecation.py index 668d3e5..88376f8 100644 --- a/logilab/common/deprecation.py +++ b/logilab/common/deprecation.py @@ -28,19 +28,20 @@ from functools import wraps class DeprecationWrapper(object): """proxy to print a warning on access to any attribute of the wrapped object """ - def __init__(self, proxied, msg=None): + def __init__(self, proxied, msg=None, version=None): self._proxied = proxied self._msg = msg + self.version = version def __getattr__(self, attr): - warn(self._msg, DeprecationWarning, stacklevel=2) + send_warning(self._msg, stacklevel=3, version=self.version) return getattr(self._proxied, attr) def __setattr__(self, attr, value): if attr in ('_proxied', '_msg'): self.__dict__[attr] = value else: - warn(self._msg, DeprecationWarning, stacklevel=2) + send_warning(self._msg, stacklevel=3, version=self.version) setattr(self._proxied, attr, value) @@ -87,7 +88,7 @@ def send_warning(reason, version=None, stacklevel=2): warn(reason, DeprecationWarning, stacklevel=stacklevel) -def argument_removed(old_argument_name): +def argument_removed(old_argument_name, version=None): """ callable decorator to allow getting backward compatibility for renamed keyword arguments. @@ -103,8 +104,8 @@ def argument_removed(old_argument_name): @wraps(func) def check_kwargs(*args, **kwargs): if old_argument_name in kwargs: - warn(f"argument {old_argument_name} of callable {func.__name__} has been removed and is " - f"deprecated", stacklevel=2) + send_warning(f"argument {old_argument_name} of callable {func.__name__} has been " + f"removed and is deprecated", stacklevel=3, version=version) del kwargs[old_argument_name] return func(*args, **kwargs) @@ -169,7 +170,7 @@ def moved(modpath, objname, version=None, stacklevel=2): return callnew -def attribute_renamed(old_name, new_name): +def attribute_renamed(old_name, new_name, version=None): """ class decorator to allow getting backward compatibility for renamed attributes. @@ -196,15 +197,15 @@ def attribute_renamed(old_name, new_name): ) def _get_old(self): - warn(reason, DeprecationWarning, stacklevel=2) + send_warning(reason, stacklevel=3, version=version) return getattr(self, new_name) def _set_old(self, value): - warn(reason, DeprecationWarning, stacklevel=2) + send_warning(reason, stacklevel=3, version=version) setattr(self, new_name, value) def _del_old(self): - warn(reason, DeprecationWarning, stacklevel=2) + send_warning(reason, stacklevel=3, version=version) delattr(self, new_name) setattr(klass, old_name, property(_get_old, _set_old, _del_old)) @@ -214,7 +215,7 @@ def attribute_renamed(old_name, new_name): return _class_wrap -def argument_renamed(old_name, new_name): +def argument_renamed(old_name, new_name, version=None): """ callable decorator to allow getting backward compatibility for renamed keyword arguments. @@ -235,8 +236,9 @@ def argument_renamed(old_name, new_name): f"{new_name} has keyword arguments, only uses {new_name}") if old_name in kwargs: - warn(f"argument {old_name} of callable {func.__name__} has been renamed and is " - f"deprecated, use keyword argument {new_name} instead", stacklevel=2) + send_warning(f"argument {old_name} of callable {func.__name__} has been renamed " + f"and is deprecated, use keyword argument {new_name} instead", + stacklevel=3, version=version) kwargs[new_name] = kwargs[old_name] del kwargs[old_name] diff --git a/test/unittest_deprecation.py b/test/unittest_deprecation.py index dfe6b67..7662a23 100644 --- a/test/unittest_deprecation.py +++ b/test/unittest_deprecation.py @@ -107,7 +107,7 @@ class RawInputTC(TestCase): some_class = SomeClass() self.assertEqual(some_class.old, some_class.new) self.assertEqual(self.messages, - ['SomeClass.old has been renamed and is deprecated, use SomeClass.new ' + ['[logilab.common] SomeClass.old has been renamed and is deprecated, use SomeClass.new ' 'instead']) some_class.old = 43 @@ -128,7 +128,7 @@ class RawInputTC(TestCase): self.assertEqual(some_function(new=42), 42) self.assertEqual(some_function(old=42), 42) self.assertEqual(self.messages, - ['argument old of callable some_function has been renamed and is ' + ['[logilab.common] argument old of callable some_function has been renamed and is ' 'deprecated, use keyword argument new instead']) with self.assertRaises(ValueError): @@ -142,7 +142,7 @@ class RawInputTC(TestCase): self.assertEqual(some_function(new=42), 42) self.assertEqual(some_function(new=10, old=20), 10) self.assertEqual(self.messages, - ['argument old of callable some_function has been removed and is ' + ['[logilab.common] argument old of callable some_function has been removed and is ' 'deprecated']) def test_renamed(self): |