#!/usr/bin/env python
"""
Deprecated decorator.
Author: Giampaolo Rodola' <g.rodola [AT] gmail [DOT] com>
License: MIT
"""
import warnings
import functools
def deprecated(replacement=None):
"""A decorator which can be used to mark functions as deprecated.
replacement is a callable that will be called with the same args
as the decorated function.
>>> @deprecated()
... def foo(x):
... return x
...
>>> ret = foo(1)
DeprecationWarning: foo is deprecated
>>> ret
1
>>>
>>>
>>> def newfun(x):
... return 0
...
>>> @deprecated(newfun)
... def foo(x):
... return x
...
>>> ret = foo(1)
DeprecationWarning: foo is deprecated; use newfun instead
>>> ret
0
>>>
"""
def outer(fun):
msg = "psutil.%s is deprecated" % fun.__name__
if replacement is not None:
msg += "; use %s instead" % replacement
if fun.__doc__ is None:
fun.__doc__ = msg
@functools.wraps(fun)
def inner(*args, **kwargs):
warnings.warn(msg, category=DeprecationWarning, stacklevel=2)
return fun(*args, **kwargs)
return inner
return outer
if __name__ == '__main__':
# --- new function
def sum_many(*args):
return sum(args)
# --- old / deprecated function
@deprecated(sum_many)
def sum_couple(a, b):
return a + b
print sum_couple(2, 2)
Diff to Previous Revision
--- revision 2 2011-12-03 09:52:08
+++ revision 3 2013-12-14 01:24:31
@@ -8,6 +8,7 @@
"""
import warnings
+import functools
def deprecated(replacement=None):
"""A decorator which can be used to mark functions as deprecated.
@@ -37,16 +38,18 @@
0
>>>
"""
- def outer(oldfun):
+ def outer(fun):
+ msg = "psutil.%s is deprecated" % fun.__name__
+ if replacement is not None:
+ msg += "; use %s instead" % replacement
+ if fun.__doc__ is None:
+ fun.__doc__ = msg
+
+ @functools.wraps(fun)
def inner(*args, **kwargs):
- msg = "%s is deprecated" % oldfun.__name__
- if replacement is not None:
- msg += "; use %s instead" % (replacement.__name__)
- warnings.warn(msg, DeprecationWarning, stacklevel=2)
- if replacement is not None:
- return replacement(*args, **kwargs)
- else:
- return oldfun(*args, **kwargs)
+ warnings.warn(msg, category=DeprecationWarning, stacklevel=2)
+ return fun(*args, **kwargs)
+
return inner
return outer