A simple persisted LRU cache Python module.
Pretty much shelve
, but self evicting. Design to work well when persisting data between GitHub Action runs with actions/cache.
import lru_cache
with lru_cache.open("cache.pickle", max_bytesize=lru_cache.bytesize(kb=5)) as cache:
cache["answer"] = 42
Or using click with it's resource manager:
import click
import lru_cache
@click.group()
@click.option("--cache-path", default="cache.pickle", type=click.Path(writable=True))
@click.pass_context
def cli(ctx, cache_path):
ctx.obj = ctx.with_resource(lru_cache.open(cache_path))
@cli.command()
@click.pass_obj
def incr(cache: lru_cache.LRUCache):
cache["count"] = count = cache.get("count", 0) + 1
click.echo(f"count: {count}")
Not officially published on Python Package Index (PyPI), but you can install it directly from GitHub:
$ pip install https://github.com/josh/py-lru-cache/releases/download/v1.0.1/lru_cache-1.0.1-py3-none-any.whl
or just download the file:
$ curl -L https://github.com/josh/lru-cache-python/releases/download/v1.0.1/lru_cache.py >lru_cache.py