Advanced caching in python
Project description
thornfield
: Advanced caching in python
Installation
pip install thornfield
Usage
Choose the cache storage you want to use - in-memory, redis and postgresql are currently implemented.
You can use a different storage by implementing the Cache
interface.
Then, use the cached
decorator to annotate the function being cached:
cacher = Cacher(cache_factory_func)
@cacher.cached
def foo():
...
The decorator supports:
- Setting an expiration time for the cached values.
- Caching only values that match a constraint (e.g. not
None
). - Using only some of the function parameters as keys for the cache.
- Caching async functions.
Caching only some parameters
In case you don't want to use all the parameters of the function as cache key,
you can the Cached
or NotCached
types:
from thornfield.typing import Cached, NotCached
@cached
def request(url: str, token: str, timeout: NotCached[int]):
...
@cached
async def request_async(url: Cached[str], timeout: int, callback):
...
Caching abstract methods
In order to avoid adding the same decorator to all implementations of an
abstract method, you can use cache_method
as follows:
class Base(ABC):
def __init__(self):
cacher.cache_method(do_something)
@abstractmethod
def do_something(self):
pass
Cache Factories
In the cache_factories
package you can find cache factories for Redis and PostgreSQL.
They both cache each function to a different table (in PostgreSQL, db in Redis).
Their create
method can be passed as cache_impl
to the constructor of Cacher
.
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
Hashes for thornfield-1.5.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 69cf086cfda1d3a9a9432e19f0a66f7108445f64e61a177f4eefa1ffd6f3c1f3 |
|
MD5 | f28d160d6d3414a5d009c94c7c516140 |
|
BLAKE2b-256 | 66ddccf9f97bfc7baee16226b76c7038e3a068c82958e762d217706d638f4f7a |