summaryrefslogtreecommitdiff
path: root/logilab/common/deprecation.py
diff options
context:
space:
mode:
Diffstat (limited to 'logilab/common/deprecation.py')
-rw-r--r--logilab/common/deprecation.py74
1 files changed, 45 insertions, 29 deletions
diff --git a/logilab/common/deprecation.py b/logilab/common/deprecation.py
index 4a14aac..cdf538c 100644
--- a/logilab/common/deprecation.py
+++ b/logilab/common/deprecation.py
@@ -226,8 +226,51 @@ def send_warning(reason, version=None, stacklevel=2):
warn(reason, DeprecationWarning, stacklevel=stacklevel)
-def deprecated(reason=None, stacklevel=2, name=None, doc=None):
- return _defaultdeprecator.deprecated(None, reason, stacklevel, name, doc)
+def argument_removed(old_argument_name):
+ """
+ callable decorator to allow getting backward compatibility for renamed keyword arguments.
+
+ >>> @argument_removed("old")
+ ... def some_function(new):
+ ... return new
+ >>> some_function(old=42)
+ sample.py:15: DeprecationWarning: argument old of callable some_function has been renamed and is deprecated, use keyword argument new instead
+ some_function(old=42)
+ 42
+ """
+ def _wrap(func):
+ @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)
+ del kwargs[old_argument_name]
+
+ return func(*args, **kwargs)
+
+ return check_kwargs
+
+ return _wrap
+
+
+@argument_removed("name")
+@argument_removed("doc")
+def deprecated(reason=None, version=None, stacklevel=2):
+ """Display a deprecation message only if the version is older than the
+ compatible version.
+ """
+ def decorator(func):
+ message = reason or 'The function "%s" is deprecated'
+ if '%s' in message:
+ message %= func.__name__
+
+ @wraps(func)
+ def wrapped(*args, **kwargs):
+ send_warning(message, version, stacklevel + 1)
+ return func(*args, **kwargs)
+ return wrapped
+
+ return decorator
class class_deprecated(type):
@@ -325,33 +368,6 @@ def argument_renamed(old_name, new_name):
return _wrap
-def argument_removed(old_argument_name):
- """
- callable decorator to allow getting backward compatibility for renamed keyword arguments.
-
- >>> @argument_removed("old")
- ... def some_function(new):
- ... return new
- >>> some_function(old=42)
- sample.py:15: DeprecationWarning: argument old of callable some_function has been renamed and is deprecated, use keyword argument new instead
- some_function(old=42)
- 42
- """
- def _wrap(func):
- @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)
- del kwargs[old_argument_name]
-
- return func(*args, **kwargs)
-
- return check_kwargs
-
- return _wrap
-
-
def renamed(old_name, new_function):
"""use to tell that a callable has been renamed.