Skip to main content

cachingutils

Utilities to make caching data easier

Examples

Basic caching:

from cachingutils import cached


@cached()
def fib(n: int) -> int:
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)

print(fib(100))  # 354224848179261915075

Caching with your own cache object:

from cachingutils import Cache, cached


my_cache = Cache()

@cached(cache=my_cache)
def fib(n: int) -> int:
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)

print(fib(100))  # 354224848179261915075

Caching with an LRU cache:

from cachingutils import LRUCache, cached


@cached(cache=LRUCache(2, timeout=60), include_posargs=[0])
def fetch_thing(thing_id: int, thing_name: str) -> tuple[int, str]:
    return thing_id, thing_name  # Imagine this is a call to an API

print(fetch_thing(123, "456"))  # (123, "456")
print(fetch_thing(123, "789"))  # (123, "456")

fetch_thing(567, "789")
fetch_thing(789, "456")

print(fetch_thing(123, "456"))  # Cache miss

Async caching:

from asyncio import run

from cachingutils import acached


@acached()
async def fib(n: int) -> int:
    if n < 2:
        return n
    return await fib(n - 1) + await fib(n - 2)

print(run(fib(100)))  # 354224848179261915075

Caching specific positional args:

from cachingutils import cached


@cached(include_posargs=[0])
async def add(a: int, b: int) -> int:
    return a + b

print(add(1, 2))  # 3
print(add(2, 2))  # 3
print(add(2, 3))  # 5

Caching specific keyword args:

from cachingutils import cached


@cached(include_posargs=[0], include_kwargs=['c'])
def add(a: int, b: int, *, c: int) -> int:
    return a + b

print(add(1, 2, c=3))  # 3
print(add(2, 2, c=3))  # 4
print(add(2, 3, c=3))  # 4

Caching with a timeout:

from time import sleep

from cachingutils import cached


@cached(timeout=1, include_posargs=[0])
def add(a: int, b: int) -> int:
    return a + b

print(add(1, 2))  # 3
print(add(1, 3))  # 3
sleep(2)
print(add(1, 3))  # 4

Using a raw Cache object:

from time import sleep

from cachingutils import Cache


my_cache: Cache[str, int] = Cache(timeout=5)

my_cache["abc"] = 123

print(my_cache["abc"])  # 123

sleep(6)

print(my_cache["abc"])  # KeyError: 'abc'

All of the above decorators also work within classes:

from cachingutils import cached


class MyClass:
    @cached()
    def fib(self, n: int) -> int:
        if n < 2:
            return n
        return self.fib(n - 1) + self.fib(n - 2)


my_class = MyClass()

print(my_class.fib(100))  # 354224848179261915075

Metadata

Release files for cachingutils 1.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cachingutils 1.0.7
File Size Uploaded
cachingutils-1.0.7.tar.gz 4.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cachingutils 1.0.7
File Interpreter ABI Platform
cachingutils-1.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 8.7 kB

Release files / cachingutils-1.0.7.tar.gz

Download URL cachingutils-1.0.7.tar.gz
Size 4.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a3229f9a600aed1666d45e1dd1bf09c64616dbe67db68df79a8abdf5bee1d3b5
BLAKE2b-256 checksum
How to use checksums
78ae4df0fc648d06d24717ede448c40567a54dd8fabe1f06fdbb7e5f453e6fc4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.12 CPython/3.10.2 Linux/5.16.0-arch1-1

Release files / cachingutils-1.0.7-py3-none-any.whl

Download URL cachingutils-1.0.7-py3-none-any.whl
Size 4.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
84b18d689c324c326037ed9574c97e49cc456c68006828fef31314aff49c970c
BLAKE2b-256 checksum
How to use checksums
6c41beedc3d7dbe191b991049415962be012d776bd51697d879d963f7571716c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.12 CPython/3.10.2 Linux/5.16.0-arch1-1

Release history Release notifications | RSS feed

This release

1.0.7 This release

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page