Skip to main content

Caching for class based generators

Project description

Class based cache

tests codecov publish Python Version from PEP 621 TOML PyPI - Version Code Style: Ruff

Installation

Recommended installation with pip:

pip install class-cache

Usage

  • 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 brotli algorithm 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.

Development

  • 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 format the code, use the black format: black .
    • To sort the imports, user isort utility: isort .
  • 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
    

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

class_cache-0.10.1.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

class_cache-0.10.1-py3-none-any.whl (11.6 kB view details)

Uploaded Python 3

File details

Details for the file class_cache-0.10.1.tar.gz.

File metadata

  • Download URL: class_cache-0.10.1.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.25.1

File hashes

Hashes for class_cache-0.10.1.tar.gz
Algorithm Hash digest
SHA256 71f307c0d419307466979cef9658d8b88ddb3ca352631e59e3a4c04c775b7b5c
MD5 e78536c68bdc3e9c4cd26d0f49562dba
BLAKE2b-256 a2e01530ad3c5e21dece273f5b242d4eb3bc0c7d44a296172b0e2a2b09f1315b

See more details on using hashes here.

File details

Details for the file class_cache-0.10.1-py3-none-any.whl.

File metadata

File hashes

Hashes for class_cache-0.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5dba48dc12eb0520fd327e8e008b5fe712960deb7e8a8c2430c8a020e838d761
MD5 85354426a382a52ae1d4bf03ff373455
BLAKE2b-256 eab28ea0f6009e970caef06ce83e8c09fa11c2227d9037b2d3498e0033323e7b

See more details on using hashes here.

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