Skip to main content

Cachetools Utilities

Project description

CacheToolsUtils

Stackable cache classes for sharing, encryption, statistics and more on top of cachetools, redis and memcached.

Status Tests Coverage Issues Python Version Badges License

Module Contents

For our purpose, a cache is a key-value store, aka a dictionary, possibly with some constraints on keys (type, size) and values (size, serialization). This module provides new caches, wrappers and other utilities suitable to use with cachetools. Example:

import redis
import CacheToolsUtils as ctu
import config

redis_storage = redis.Redis(**config.REDIS_SERVER)
storage = ctu.RedisCache(redis_storage, raw=True, ttl=120)
crypto = ctu.EncryptedCache(storage, config.CACHE_KEY)
cache = ctu.ToBytesCache(crypto)

@ctu.cached(ctu.AutoPrefixedCache(cache), key=ctu.json_key)
def repeat(s: str, n: int) -> str:
    return s * n

@ctu.cached(ctu.AutoPrefixedCache(cache), key=ctu.json_key)
def banged(s: str, n: int) -> str:
    return repeat(s, n) + "!"

@ctu.cached(ctu.AutoPrefixedCache(cache), key=ctu.json_key)
def question(s: str, n: int) -> str:
    return repeat(s, n) + "?"

print(banged("aa", 3))    # add 2 cache entries
print(question("aa", 3))  # add 1 entry, 1 hit
print(repeat("aa", 3))    # cache hit!
print(banged("aa", 3))    # cache hit!

assert cache.hits() > 0

Cache classes

  • RedisCache allows to see a Redis server as a python cache by wrapping a redis.Redis instance.
  • MemCached does the same for a Memcached server. The utility class JsonSerde is a convenient JSON serializer-deserializer class for Memcached.
  • DictCache a very simple dict cache.

Wrappers to extend cache capabilities

  • PrefixedCache, PrefixedMemCached and PrefixedRedisCache add a prefix to distinguish sources on a shared cache.
  • AutoPrefixedCache add a counter-based prefix.
  • StatsCache, MemCached and RedisCache add a hits method to report the cache hit rate, stats to report statistics and reset to reset statistics.
  • LockedCache use a (thread) lock to control cache accesses.
  • TwoLevelCache allows to combine two caches.
  • DebugCache to trace cache calls using logging.
  • EncryptedCache a cache with key hashing and value encryption.
  • ToBytesCache map keys and values to bytes.
  • BytesCache map bytes keys and values to strings.

Cache utilities

  • cached decorator: a cachetools replacement which allows to test if a function result is in cache, and to delete such an entry.
  • cacheFunctions and cacheMethods: add caching to functions or methods.
  • json_key, hash_json_key, full_hash_key: convenient JSON-based cache key serialization functions for cached.

License

This code is Public Domain.

All software has bug, this is software, hence… Beware that you may lose your hairs or your friends because of it. If you like it, feel free to send a postcard to the author.

More

See the documentation, sources and issues on GitHub.

See packages on PyPI.

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

cachetoolsutils-11.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cachetoolsutils-11.0-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file cachetoolsutils-11.0.tar.gz.

File metadata

  • Download URL: cachetoolsutils-11.0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for cachetoolsutils-11.0.tar.gz
Algorithm Hash digest
SHA256 4606e53a4526f1f51dc3ee3336fc68afc2e2284cb880f84d7c191ad8fc098d16
MD5 9471896f157737809a276dd61f8fe35a
BLAKE2b-256 4464fb656abc52ace12006e273881c50bfe653904cbcaf45dfbe63a4cf3a0065

See more details on using hashes here.

File details

Details for the file cachetoolsutils-11.0-py3-none-any.whl.

File metadata

  • Download URL: cachetoolsutils-11.0-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for cachetoolsutils-11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d3644c214f29b19619750ba9f3b06df4792822d535aed1ee60b31b0bc42245c8
MD5 68507d78650ab6c2fe81378e2985212b
BLAKE2b-256 2af77fcc7b23fab403794044ec145a498ad92a8a3d6e54fb0cc4f87ca0e52fe6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page