Skip to main content

Advanced caching in python

Project description

thornfield: Advanced caching in python

Build Status codecov License: MIT Code style: black

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 function.

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):
    ...

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

thornfield-1.1.1.tar.gz (8.5 kB view hashes)

Uploaded Source

Built Distribution

thornfield-1.1.1-py3-none-any.whl (12.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page