This package helps you create decorators that alter the signatures of decorated functions in predictable ways, namely inserting/removing arguments from the front and inserting/removing keyword arguments.
Table of Contents
The simplest way to use signature-altering looks like this:
@decorator
def no_op_decorator(f, *args, **kwargs):
return f(*args, **kwargs)
For the rest of the examples we will assume the decorator will be used as follows:
@spam
def ham(a, b):
return a + b
Suppose we want ham
to behave like this:
>>> ham(100, 2, 3)
95
We would need to provide a definition of spam
like this:
@decorator
def spam(f, prefix, *args, **kwargs):
return prefix - f(*args, **kwargs)
Note that ham
now has a different signature from how it was defined.
If we, on the other hand, want to supply fewer arguments, like this:
>>> ham(7)
107
We would do this:
@decorator(insert_args=1)
def spam(f, *args, **kwargs):
return f(100, *args, **kwargs)
Keyword arguments work mostly the same, except we need to supply the names when inserting them:
@decorator(insert_kwargs='a b')
def spam(f, *args, **kwargs):
return f(*args, a=7, b=5, **kwargs)
signature-altering is distributed on PyPI as a universal wheel and is available on Linux/macOS and Windows and supports Python 3.5+ and PyPy.
$ pip install signature-altering
signature-altering is distributed under the terms of the MIT License.