30 lines
841 B
Python
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
|