arcology/arcology/cache_decorator.py

30 lines
841 B
Python

# [[file:../scaffolding.org::*File-backed HTML/Atom cache][File-backed HTML/Atom cache:2]]
import pathlib
from django.core.cache import caches
import logging
logger = logging.getLogger(__name__)
def cache(key_prefix="", cache_connection="default", expire_secs=600):
def return_decoration(func):
def wrapper(*args, **kwargs):
cache = caches["default"]
key = args
for k, v in kwargs.items():
key += tuple(k,v)
cache_key = f"{key_prefix}/{hash(key)}"
ret = cache.get(cache_key)
if ret is None:
logger.debug(f"cache_miss {cache_key}")
ret = func(*args, **kwargs)
cache.set(cache_key, ret, expire_secs)
else:
logger.debug(f"cache_hit {cache_key}")
return ret
return wrapper
return return_decoration
# File-backed HTML/Atom cache:2 ends here