mirror of
https://github.com/long2ice/fastapi-cache.git
synced 2026-03-24 20:47:54 +00:00
This ensures that any syntax issues are caught early (by type checkers and tests). Backends that are missing dependencies are skipped. By importing, this exposed an issue where the redis type annotations raised an exception, which has been fixed by using forward annotations. To help avoid import dependency hell, the Backend ABC has been moved to `fastapi_cache.types`. In the process, it has been made an actual ABC.
42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
import abc
|
|
from typing import Any, Awaitable, Callable, Dict, Optional, Tuple, Union
|
|
|
|
from starlette.requests import Request
|
|
from starlette.responses import Response
|
|
from typing_extensions import Protocol
|
|
|
|
|
|
_Func = Callable[..., Any]
|
|
|
|
|
|
class KeyBuilder(Protocol):
|
|
def __call__(
|
|
self,
|
|
__function: _Func,
|
|
__namespace: str = ...,
|
|
*,
|
|
request: Optional[Request] = ...,
|
|
response: Optional[Response] = ...,
|
|
args: Tuple[Any, ...],
|
|
kwargs: Dict[str, Any],
|
|
) -> Union[Awaitable[str], str]:
|
|
...
|
|
|
|
|
|
class Backend(abc.ABC):
|
|
@abc.abstractmethod
|
|
async def get_with_ttl(self, key: str) -> Tuple[int, Optional[bytes]]:
|
|
raise NotImplementedError
|
|
|
|
@abc.abstractmethod
|
|
async def get(self, key: str) -> Optional[bytes]:
|
|
raise NotImplementedError
|
|
|
|
@abc.abstractmethod
|
|
async def set(self, key: str, value: bytes, expire: Optional[int] = None) -> None:
|
|
raise NotImplementedError
|
|
|
|
@abc.abstractmethod
|
|
async def clear(self, namespace: Optional[str] = None, key: Optional[str] = None) -> int:
|
|
raise NotImplementedError
|