Use typing.ParamSpec to type get_or_set()

This commit is contained in:
Dato Simó 2024-09-01 02:21:10 -03:00
parent 4852f7ff1e
commit 93396c0f2c
2 changed files with 10 additions and 7 deletions

View file

@ -1,17 +1,20 @@
""" Custom handler for caching """
from typing import Any, Callable, Tuple, Union
from typing import Callable, Optional, ParamSpec, TypeVar, cast
from django.core.cache import cache
Args = ParamSpec("Args")
Ret = TypeVar("Ret")
def get_or_set(
cache_key: str,
function: Callable[..., Any],
*args: Tuple[Any, ...],
timeout: Union[float, None] = None
) -> Any:
function: Callable[Args, Ret],
*args: Args.args,
timeout: Optional[float] = None
) -> Ret:
"""Django's built-in get_or_set isn't cutting it"""
value = cache.get(cache_key)
value = cast(Optional[Ret], cache.get(cache_key))
if value is None:
value = function(*args)
cache.set(cache_key, value, timeout=timeout)

View file

@ -25,4 +25,4 @@ ignore_errors = False
[mypy-bookwyrm.templatetags.*]
ignore_errors = False
allow_untyped_calls = True
disable_error_code = attr-defined, arg-type
disable_error_code = attr-defined