summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Peuch <cortex@worlddomination.be>2020-04-30 16:06:23 +0200
committerLaurent Peuch <cortex@worlddomination.be>2020-04-30 16:06:23 +0200
commite4e0dfe5630342b8983836fa2f038207ceeefd7c (patch)
treebe8d36b1572933beb2fb0a43e1b0fc17ce8ddebf
parent030b4e354371efe9acf15372636866619ec28c9c (diff)
downloadlogilab-common-e4e0dfe5630342b8983836fa2f038207ceeefd7c.tar.gz
[deprecation] 'deprecated' function renamed 'callable_deprecated'
-rw-r--r--logilab/common/deprecation.py55
-rw-r--r--test/unittest_deprecation.py8
2 files changed, 33 insertions, 30 deletions
diff --git a/logilab/common/deprecation.py b/logilab/common/deprecation.py
index ba34445..48f3202 100644
--- a/logilab/common/deprecation.py
+++ b/logilab/common/deprecation.py
@@ -88,6 +88,31 @@ def send_warning(reason, version=None, stacklevel=2):
warn(reason, DeprecationWarning, stacklevel=stacklevel)
+def callable_renamed(old_name, new_function, version=None):
+ """use to tell that a callable has been renamed.
+
+ It returns a callable wrapper, so that when its called a warning is printed
+ telling what is the object new name.
+
+ >>> old_function = renamed('old_function', new_function)
+ >>> old_function()
+ sample.py:57: DeprecationWarning: old_function has been renamed and is deprecated, uses new_function instead
+ old_function()
+ >>>
+ """
+ @wraps(new_function)
+ def wrapped(*args, **kwargs):
+ send_warning((
+ f"{old_name} has been renamed and is deprecated, uses {new_function.__name__} "
+ f"instead"
+ ), stacklevel=3, version=version)
+ return new_function(*args, **kwargs)
+ return wrapped
+
+
+renamed = callable_renamed(old_name="renamed", new_function=callable_renamed)
+
+
def argument_removed(old_argument_name, version=None):
"""
callable decorator to allow getting backward compatibility for renamed keyword arguments.
@@ -117,7 +142,7 @@ def argument_removed(old_argument_name, version=None):
@argument_removed("name")
@argument_removed("doc")
-def deprecated(reason=None, version=None, stacklevel=2):
+def callable_deprecated(reason=None, version=None, stacklevel=2):
"""Display a deprecation message only if the version is older than the
compatible version.
"""
@@ -135,6 +160,9 @@ def deprecated(reason=None, version=None, stacklevel=2):
return decorator
+deprecated = callable_renamed(old_name="deprecated", new_function=callable_deprecated)
+
+
class class_deprecated(type):
"""metaclass to print a warning on instantiation of a deprecated class"""
@@ -251,31 +279,6 @@ def moved(module_name, object_name, version=None, stacklevel=2):
return callnew
-def callable_renamed(old_name, new_function, version=None):
- """use to tell that a callable has been renamed.
-
- It returns a callable wrapper, so that when its called a warning is printed
- telling what is the object new name.
-
- >>> old_function = renamed('old_function', new_function)
- >>> old_function()
- sample.py:57: DeprecationWarning: old_function has been renamed and is deprecated, uses new_function instead
- old_function()
- >>>
- """
- @wraps(new_function)
- def wrapped(*args, **kwargs):
- send_warning((
- f"{old_name} has been renamed and is deprecated, uses {new_function.__name__} "
- f"instead"
- ), stacklevel=3, version=version)
- return new_function(*args, **kwargs)
- return wrapped
-
-
-renamed = callable_renamed(old_name="renamed", new_function=callable_renamed)
-
-
def class_renamed(old_name, new_class, message=None, version=None):
"""automatically creates a class which fires a DeprecationWarning
when instantiated.
diff --git a/test/unittest_deprecation.py b/test/unittest_deprecation.py
index 09ec45a..597b021 100644
--- a/test/unittest_deprecation.py
+++ b/test/unittest_deprecation.py
@@ -79,19 +79,19 @@ class RawInputTC(TestCase):
['[logilab.common] class AnyClass is now available as unittest_deprecation.AnyClass'])
def test_deprecated_func(self):
- any_func = deprecation.deprecated()(self.mk_func())
+ any_func = deprecation.callable_deprecated()(self.mk_func())
any_func()
- any_func = deprecation.deprecated('message')(self.mk_func())
+ any_func = deprecation.callable_deprecated('message')(self.mk_func())
any_func()
self.assertEqual(self.messages,
['[logilab.common] The function "any_func" is deprecated', '[logilab.common] message'])
def test_deprecated_decorator(self):
- @deprecation.deprecated()
+ @deprecation.callable_deprecated()
def any_func():
pass
any_func()
- @deprecation.deprecated('message')
+ @deprecation.callable_deprecated('message')
def any_func():
pass
any_func()