2023-05-12 17:20:22 +01:00
|
|
|
import abc
|
2023-05-09 15:30:46 +01:00
|
|
|
from typing import Any, Awaitable, Callable, Dict, Optional, Tuple, Union
|
2023-04-27 16:24:22 +01:00
|
|
|
|
|
|
|
|
from starlette.requests import Request
|
|
|
|
|
from starlette.responses import Response
|
2023-05-09 15:30:46 +01:00
|
|
|
from typing_extensions import Protocol
|
2023-04-27 16:24:22 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
_Func = Callable[..., Any]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KeyBuilder(Protocol):
|
|
|
|
|
def __call__(
|
|
|
|
|
self,
|
2023-05-09 17:08:32 +01:00
|
|
|
__function: _Func,
|
|
|
|
|
__namespace: str = ...,
|
2023-04-27 16:24:22 +01:00
|
|
|
*,
|
|
|
|
|
request: Optional[Request] = ...,
|
|
|
|
|
response: Optional[Response] = ...,
|
2023-05-09 17:08:32 +01:00
|
|
|
args: Tuple[Any, ...],
|
|
|
|
|
kwargs: Dict[str, Any],
|
2023-04-27 16:24:22 +01:00
|
|
|
) -> Union[Awaitable[str], str]:
|
|
|
|
|
...
|
2023-05-12 17:20:22 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|