Spaces:
Running
Running
| from dataclasses import dataclass | |
| from time import monotonic | |
| from typing import Any | |
| 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() | |