diff options
Diffstat (limited to 'logilab/common/deprecation.py')
-rw-r--r-- | logilab/common/deprecation.py | 28 |
1 files changed, 15 insertions, 13 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] |