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)