🚧 api: building redis cache decorator

This commit is contained in:
Jörn-Michael Miehe 2026-02-25 23:00:09 +01:00
parent 21defd1e3d
commit 3a64668d89

View file

@ -74,10 +74,7 @@ def args_slice(func: Callable[P, R], *args: Iterable) -> tuple:
return tuple(*args) return tuple(*args)
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:
""" """
def cache_key(func: Callable[P, R], *args: P.args, **kwargs: P.kwargs) -> str:
"""Return a cache key for use with cached methods.""" """Return a cache key for use with cached methods."""
kwargs_by_key = sorted(kwargs.items(), key=lambda kv: kv[0]) kwargs_by_key = sorted(kwargs.items(), key=lambda kv: kv[0])
@ -90,14 +87,12 @@ def redis_cached(cfg: Config) -> Callable[[Callable[P, R]], Callable[P, R]]:
(f"{k}={v!r}" for k, v in kwargs_by_key), (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) return ":".join(parts)
def redis_cached(cfg: Config) -> Callable[[Callable[P, R]], Callable[P, R]]:
""" """
def decorator(func: Callable[P, R]) -> Callable[P, R]: 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: def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
key = cache_key(func, *args, **kwargs) key = cache_key(func, *args, **kwargs)
if cfg.prefix is not None:
key = f"{cfg.prefix}:{key}"
# pre-hook # pre-hook
result = func(*args, **kwargs) result = func(*args, **kwargs)
# post-hook # post-hook