Source code for pylav.storage.database.cache.decodators

from __future__ import annotations

import functools
from collections.abc import Awaitable, Callable

from pylav.constants.config import READ_CACHING_ENABLED
from pylav.storage.database.cache.cache import CACHE
from pylav.storage.database.cache.functions import key_builder
from pylav.type_hints.generics import ANY_GENERIC_TYPE, PARAM_SPEC_TYPE


[docs] def maybe_cached( func: Callable[PARAM_SPEC_TYPE, Awaitable[ANY_GENERIC_TYPE]] # type: ignore ) -> Callable[ANY_GENERIC_TYPE, Awaitable[ANY_GENERIC_TYPE]]: # type: ignore @functools.wraps(func) async def wrapper(*args: PARAM_SPEC_TYPE.args, **kwargs: PARAM_SPEC_TYPE.kwargs) -> Awaitable[ANY_GENERIC_TYPE]: if READ_CACHING_ENABLED: return await CACHE(ttl=None, key=key_builder(func, *args, **kwargs))(func)(*args, **kwargs) return await func(*args, **kwargs) return wrapper