🚧 api: building redis cache decorator
This commit is contained in:
parent
21defd1e3d
commit
3a64668d89
1 changed files with 19 additions and 21 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue