Intercepts allows you to intercept function calls in Python and handle them in any manner you choose. For example, you can pre-process the inputs to a function, or apply post-processing on its output. Intercepts also allows you to completely replace a function with a custom implementation.
>>> increment(41)
42
>>> intercepts.register(increment, handler)
>>> increment(41)
40
>>> intercepts.unregister(increment)
>>> intercepts.register(increment, handler2)
>>> increment(41)
'The answer is: 42'
>>> intercepts.unregister_all()
Handler functions receive all paramters to the intercepted function call and
can access the intercepted function through the variable _
.
>>> def handler(num):
... result = _(num)
... return num - (result - num)
>>> def handler2(*args, **kwargs):
... result = _(*args, **kwargs)
... return f"The answer is: {result}"
The intercepts module also allows intercepting python built-in functions, such
as print
and sorted
. For best results, the intercepts module should be the
first module imported.
>>> def print_handler(message):
... return _(''.join(reversed(message)))
>>> print("Hello world")
Hello world
>>> intercepts.register(print, print_handler)
>>> print("Hello world")
dlrow olleH
Intercepts requires Python 3.7+ on Linux or Windows and can be installed using pip
.
$ pip install intercepts
Or, use pip
to install the latest version from the github source.
$ pip install -U git+https://github.com/dlshriver/intercepts.git@main
Some documentation is available here.