31 lines
1 KiB
Python
31 lines
1 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import warnings
|
|
import functools
|
|
|
|
def deprecated(replace=None):
|
|
'''This is a decorator which can be used to mark functions
|
|
as deprecated. It will result in a warning being emitted
|
|
when the function is used.'''
|
|
|
|
if replace == None:
|
|
instead = ""
|
|
elif isinstance(replace, str) or isinstance(replace, unicode):
|
|
instead = " " + replace
|
|
else:
|
|
instead = " Use %s instead." % (replace.__name__,)
|
|
|
|
def real_decorator(func):
|
|
"""Nested because a decorator with a parameter has to be coded this way"""
|
|
@functools.wraps(func)
|
|
def new_func(*args, **kwargs):
|
|
warnings.warn_explicit(
|
|
"Call to deprecated function %s.%s" % (func.__name__, instead),
|
|
category=DeprecationWarning,
|
|
filename=func.func_code.co_filename,
|
|
lineno=func.func_code.co_firstlineno + 1
|
|
)
|
|
return func(*args, **kwargs)
|
|
return new_func
|
|
return real_decorator
|