Spaces:
Running
Running
File size: 956 Bytes
45b1179 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | from dataclasses import dataclass
from time import monotonic
from typing import Any
@dataclass
class _CacheEntry:
value: Any
expires_at: float
class SimpleTTLCache:
def __init__(self, default_ttl_seconds: int = 60) -> None:
self._default_ttl_seconds = default_ttl_seconds
self._values: dict[str, _CacheEntry] = {}
def get(self, key: str) -> Any | None:
entry = self._values.get(key)
if entry is None:
return None
if entry.expires_at <= monotonic():
self._values.pop(key, None)
return None
return entry.value
def set(self, key: str, value: Any, ttl_seconds: int | None = None) -> None:
ttl = ttl_seconds if ttl_seconds is not None else self._default_ttl_seconds
self._values[key] = _CacheEntry(
value=value,
expires_at=monotonic() + ttl,
)
def clear(self) -> None:
self._values.clear()
|