Recommended installation with pip:
pip install class-cache- 
Basic usage: from class_cache import Cache # Create cache cache = Cache() # Set item in cache # NOTE: Keys and values have to be pickle-serialisable cache["foo"] = "bar" # Save cache to backend (disk by default) cache.write() # During another program run just create same cache again and you can retrieve data del cache cache2 = Cache() assert cache2["foo"] == "bar" 
- 
Use multiple caches: cache1 = Cache(1) cache2 = Cache(2) cache1["foo"] = "bar" cache2["foo"] = "zar" assert cache1["foo"] != cache2["foo"] 
- 
Use cache with default factory: from class_cache import CacheWithDefault class MyCache(CacheWithDefault[str, str]): NON_HASH_ATTRIBUTES = frozenset({*CacheWithDefault.NON_HASH_ATTRIBUTES, "_misc"}) def __init__(self, name: str): # Attributes which affect default value generation should come before super().__init__() # They will be used to generate a unique id self._name = name super().__init__() # Other attributes should not affect how default value is generated, add them to NON_HASH_ATTRIBUTES self._misc = "foo" # Define logic for defaults in _get_data def _get_data(self, key: str) -> str: return f"{self._name}_{key}" cache = MyCache("first") assert cache["foo"] == "first_foo" 
- 
Compress data before storing: from class_cache.wrappers import BrotliCompressWrapper from class_cache import Cache cache = BrotliCompressWrapper(Cache()) # Use cache as normal This wrapper uses brotlialgorithm for compression, which optimises read-time at expense of write-time. This will generally lead to less space being used and potentially faster reads if your data is compressible, e.g. text.
- 
Install dev dependencies: pip install -e ".[dev]"
- 
For linting and basic fixes ruff is used: ruff check . --fix
- 
This repository follows strict formatting style which will be checked by the CI. 
- 
To test code, use pytest: pytest .
- 
This repository follows semantic-release, which means all commit messages have to follow a style. You can use tools like commitizen to write your commits. 
- 
You can also use pre-commit to help verify that all changes are valid. Multiple hooks are used, so use the following commands to install: pre-commit install pre-commit install --hook-type commit-msg