Spaces:
Running
Running
| import time | |
| from typing import Any | |
| class Cache: | |
| def __init__(self, ttl: int = 60): | |
| self._ttl = ttl | |
| self._store: dict[str, tuple[Any, float]] = {} | |
| def set(self, key: str, value: Any) -> None: | |
| self._store[key] = (value, time.time()) | |
| def get(self, key: str) -> Any | None: | |
| if key not in self._store: | |
| return None | |
| value, ts = self._store[key] | |
| if time.time() - ts > self._ttl: | |
| return None | |
| return value | |
| def get_stale(self, key: str) -> Any | None: | |
| """Return cached value even if expired (stale-if-error fallback).""" | |
| if key not in self._store: | |
| return None | |
| return self._store[key][0] | |
| def invalidate(self, key: str) -> None: | |
| self._store.pop(key, None) | |