Spaces:
Runtime error
Runtime error
| import json | |
| from pathlib import Path | |
| from config import settings | |
| from models.wc_artifact import ( | |
| fixtures_fingerprint, | |
| hyperparams_fingerprint, | |
| squads_fingerprint, | |
| ) | |
| _memory: dict[str, dict] = {} | |
| _disk_loaded = False | |
| CACHE_FORMAT_VERSION = 2 # bump quando o formato da resposta mudar | |
| def artifact_fingerprint() -> str: | |
| return f"{fixtures_fingerprint()}:{squads_fingerprint()}:{hyperparams_fingerprint()}:v{CACHE_FORMAT_VERSION}" | |
| def _cache_file() -> Path: | |
| return settings.lake_root / "cache" / "wc_round_predictions.json" | |
| def match_key(home: str, away: str, phase: str) -> str: | |
| return f"{home}|{away}|{phase}" | |
| def invalidate_wc_round_cache() -> None: | |
| global _disk_loaded | |
| _memory.clear() | |
| _disk_loaded = False | |
| path = _cache_file() | |
| if path.exists(): | |
| path.unlink() | |
| def _load_disk_if_needed() -> None: | |
| global _disk_loaded | |
| if _disk_loaded: | |
| return | |
| _disk_loaded = True | |
| path = _cache_file() | |
| if not path.exists(): | |
| return | |
| try: | |
| payload = json.loads(path.read_text(encoding="utf-8")) | |
| except (json.JSONDecodeError, OSError): | |
| return | |
| if payload.get("artifact_fingerprint") != artifact_fingerprint(): | |
| return | |
| for key, value in payload.get("predictions", {}).items(): | |
| _memory.setdefault(key, value) | |
| def get_cached(key: str) -> dict | None: | |
| _load_disk_if_needed() | |
| return _memory.get(key) | |
| def set_cached(key: str, value: dict) -> None: | |
| _memory[key] = value | |
| def persist_to_disk() -> None: | |
| if not _memory: | |
| return | |
| path = _cache_file() | |
| path.parent.mkdir(parents=True, exist_ok=True) | |
| payload = { | |
| "artifact_fingerprint": artifact_fingerprint(), | |
| "predictions": _memory, | |
| } | |
| path.write_text(json.dumps(payload, ensure_ascii=False), encoding="utf-8") | |
| def warm_from_disk() -> int: | |
| _load_disk_if_needed() | |
| return len(_memory) | |