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"
    

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.6.0.tar.gz (10.9 kB view hashes)

Uploaded Source

Built Distribution

class_cache-0.6.0-py3-none-any.whl (9.4 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