A library for intercepting and processing Python method calls.
Project description
PyInterceptor
A library for intercepting and processing Python method calls.
Introduction
Sometimes it might be interesting to get detailed knowledge about which methods of an object have been called with which args, kwargs, at which time, etc. but without changing the underlying code. This is especially useful for:
- Debugging
- Logging
- Creating call statistics, etc.
PyInterceptor enables exactly this - it installs a handler function into a target object that intercepts specified
methods and stores (meta-) data about the calls in CallInfo objects. These objects are then handed over to a
user-defined interceptor callable.
PyInterceptor distinguishes between 2 modi:
- blocking mode: In this mode the handler does not execute the actual method and returns the return value from the
interceptor. This mode is very useful when creating mocks or stubs. - non-blocking mode: In this mode the handler executed the actual method and forwards its return value to the
interceptorcallable. Then it continues like in the blocking mode.
Installation
To install PyInterceptor from pypi using pip type:
pip install py-interceptor
To install PyInterceptor from source, do the following steps:
- Create an environment, e.g. with venv
python -m venv envenv\Scripts\activate(windows)source env/bin/activate(linux)
- Install the package from source
cd py-interceptorpip install -e .(without dev dependencies)pip install -e .[dev](with dev dependencies)
- Execute unit tests (requires dev dependencies)
pytest
Examples
The following example demonstrates how easy it is to intercept an object's method. Here we want to print the name of the executed API method together with the args and the return value:
from interceptor import CallInfo, intercept
class API:
def add(self, a, b):
return a + b
def interceptor(info: CallInfo):
print(f"Executed {info.name} with args {info.args} -> returned {info.ret_value}")
api = API()
intercept("add", api, interceptor, blocking=False)
api.add(1, 2)
The output should be:
Executed add with args (1, 2) -> returned 3
More example can be found in the examples folder.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file py_interceptor-0.1.0.tar.gz.
File metadata
- Download URL: py_interceptor-0.1.0.tar.gz
- Upload date:
- Size: 5.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11c0b517290aaf72269140f7a0a49b7393d312b24de6cc0c2a7fffd898b1c7bf
|
|
| MD5 |
4c6bcc75ee8071baf01777811710bcda
|
|
| BLAKE2b-256 |
9979e045ba208edf97b39a275f4049b7238da659b3e927d6316ea1e6e3685952
|
File details
Details for the file py_interceptor-0.1.0-py3-none-any.whl.
File metadata
- Download URL: py_interceptor-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d267da449810021849a7769e54930ee0486daf1bfc9d9bf4e873ef6d8d2e7e55
|
|
| MD5 |
8bcf6d3ddcaa34f1a2ad5089207618db
|
|
| BLAKE2b-256 |
379f802cfc609efe94a8e6e3fd98bd78629bb554f4b1a72055dbfc06d38516e6
|