summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Peuch <cortex@worlddomination.be>2020-04-23 06:54:15 +0200
committerLaurent Peuch <cortex@worlddomination.be>2020-04-23 06:54:15 +0200
commit07c6393abb3389787d7e6b98809026da394222ac (patch)
tree69d5633b06d9c852b464755533594b2295c6c0a4
parentf502fe0496b292b433c6b2299698a180769c79c6 (diff)
downloadlogilab-common-07c6393abb3389787d7e6b98809026da394222ac.tar.gz
[deprecation] use send_warning in attribute/argument_renamed, argument_removed and DeprecationWrapper
-rw-r--r--logilab/common/deprecation.py28
-rw-r--r--test/unittest_deprecation.py6
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):