From 3a64668d894299d012079e19178d624be52f2caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn-Michael=20Miehe?= Date: Wed, 25 Feb 2026 23:00:09 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A7=20api:=20building=20redis=20cache?= =?UTF-8?q?=20decorator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/advent22_api/core/dav/dec.py | 40 +++++++++++++++----------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/api/advent22_api/core/dav/dec.py b/api/advent22_api/core/dav/dec.py index 116122c..a9e79fa 100644 --- a/api/advent22_api/core/dav/dec.py +++ b/api/advent22_api/core/dav/dec.py @@ -74,30 +74,25 @@ def args_slice(func: Callable[P, R], *args: Iterable) -> tuple: return tuple(*args) +def cache_key(func: Callable[P, R], *args: P.args, **kwargs: P.kwargs) -> str: + """Return a cache key for use with cached methods.""" + + kwargs_by_key = sorted(kwargs.items(), key=lambda kv: kv[0]) + + parts = chain( + (qualified_name(func),), + # positional args + (repr(arg) for arg in args_slice(func, args)), + # keyword args + (f"{k}={v!r}" for k, v in kwargs_by_key), + ) + + return ":".join(parts) + + def redis_cached(cfg: Config) -> Callable[[Callable[P, R]], Callable[P, R]]: """ """ - def cache_key(func: Callable[P, R], *args: P.args, **kwargs: P.kwargs) -> str: - """Return a cache key for use with cached methods.""" - - kwargs_by_key = sorted(kwargs.items(), key=lambda kv: kv[0]) - - parts = chain( - (qualified_name(func),), - # positional args - (repr(arg) for arg in args_slice(func, args)), - # keyword args - (f"{k}={v!r}" for k, v in kwargs_by_key), - ) - - if cfg.prefix is not None: - parts = chain( - (cfg.prefix,), - parts, - ) - - return ":".join(parts) - def decorator(func: Callable[P, R]) -> Callable[P, R]: """ """ @@ -105,6 +100,9 @@ def redis_cached(cfg: Config) -> Callable[[Callable[P, R]], Callable[P, R]]: def wrapper(*args: P.args, **kwargs: P.kwargs) -> R: key = cache_key(func, *args, **kwargs) + if cfg.prefix is not None: + key = f"{cfg.prefix}:{key}" + # pre-hook result = func(*args, **kwargs) # post-hook