A decorator to cache method call results with similar parameters
Project description
sag_py_cache_decorator
A cache annotation that can be used to cache calls to a method
What it does
- Caches calls to methods if the same parameters are used
- Removes the least recently used cache item if a optional maximum is reached
- Supports sync and async functions
- Possibility to skip the cache by parameter
- Possibility to clear the cache entirely or for one set of parameters
Installation
pip install sag-py-cache-decorator
How to use
from sag_py_cache_decorator.lru_cache import lru_cache
@lru_cache(maxsize=3)
def my_function(str: str, str2: str) -> str:
return f"{str}-{str2}"
This is the regular use case of the cache.
Available decorator arguments:
Argument | Description | Default |
---|---|---|
maxsize | If this size is reached, the least recently used cache item will be removed. Can be set to None to have a unlimited cache. | 128 |
from sag_py_cache_decorator.lru_cache import lru_cache
@lru_cache(maxsize=3)
def my_function(
str: str,
lru_clear_cache: bool = False,
) -> str:
return f"{str}-{str2}"
my_function("one")
my_function("two")
# Before executing the next function the cache is cleared and then
# rebuilt with the results of three and four because of lru_clear_cache = True
my_function("three", lru_clear_cache = True)
my_function("four")
Available function arguments:
Argument | Description | Default |
---|---|---|
lru_use_cache | If set to false, the function call skips the cache. Existing cached items are ignored and new ones are not written for that call. | True |
lru_clear_cache | If set to true, the cache is cleared entirely before executing the method. The result of the call is then cached again. | False |
lru_clear_arg_cache | If set to true, the result for this set of parameters is removed from cache(if present). The result of the call is then cached again. | False |
How to start developing
With vscode
Just install vscode with dev containers extension. All required extensions and configurations are prepared automatically.
With pycharm
- Install latest pycharm
- Install pycharm plugin BlackConnect
- Install pycharm plugin Mypy
- Configure the python interpreter/venv
- pip install requirements-dev.txt
- pip install black[d]
- Ctl+Alt+S => Check Tools => BlackConnect => Trigger when saving changed files
- Ctl+Alt+S => Check Tools => BlackConnect => Trigger on code reformat
- Ctl+Alt+S => Click Tools => BlackConnect => "Load from pyproject.yaml" (ensure line length is 120)
- Ctl+Alt+S => Click Tools => BlackConnect => Configure path to the blackd.exe at the "local instance" config (e.g. C:\Python310\Scripts\blackd.exe)
- Ctl+Alt+S => Click Tools => Actions on save => Reformat code
- Restart pycharm
How to publish
- Update the version in setup.py and commit your change
- Create a tag with the same version number
- Let github do the rest
How to test
To avoid publishing to pypi unnecessarily you can do as follows
- Tag your branch however you like
- Use the chosen tag in the requirements.txt-file of the project you want to test this library in, eg.
sag_py_cache_decorator==<your tag>
- Rebuild/redeploy your project
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
Close
Hashes for sag_py_cache_decorator-0.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 13e3494d942a5b90a607dc9494fe8fb67c40dbaafc81d4d1c025499281712d52 |
|
MD5 | 54dcdff90a837f3f0425293411e36031 |
|
BLAKE2b-256 | 1dbf69f8dc1d966742c5beb913e07fffcf254a2fcc40f64f34b21c6696ca6c38 |
Close
Hashes for sag_py_cache_decorator-0.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4a133543f6ab440cfeb27e9089e0e701e75f305844a806922eaccc5d08e99d70 |
|
MD5 | 797d5d5a4e94a024b69970695f1ff210 |
|
BLAKE2b-256 | 0de8432e3892de2c24a0016d8a13d429ae9b91096edb9e1adad893d2a61a4581 |