Source code for meow.cache

from collections import deque

CACHE_SETTINGS = {"size": 1000, "enabled": True}
CACHED_MODELS = {}
CACHED_ARRAYS = {}


[docs]def enable_cache(): CACHE_SETTINGS["enabled"] = True return CACHE_SETTINGS["enabled"]
[docs]def disable_cache(): empty_cache() CACHE_SETTINGS["enabled"] = False return CACHE_SETTINGS["enabled"]
[docs]def empty_cache(): for cache in [CACHED_MODELS, CACHED_ARRAYS]: for k in list(cache): try: del cache[k] except KeyError: pass # sometimes in threaded apps key might already be deleted
[docs]def cache_model(model): return _cache_obj(CACHED_MODELS, model)
[docs]def cache_array(arr): return _cache_obj(CACHED_ARRAYS, arr)
def _cache_obj(cache, obj): if not CACHE_SETTINGS["enabled"]: return obj key = hash(obj) if key in cache: obj = cache[key] = cache.pop(key, obj) else: cache[key] = obj queue = deque(cache) while len(queue) > CACHE_SETTINGS["size"]: key = queue.popleft() try: del cache[key] except KeyError: pass # sometimes in threaded apps key might already be deleted return obj