Spaces:
Running
Running
| """Filesystem cache for parsed/generated tender summaries.""" | |
| from __future__ import annotations | |
| import json | |
| import pathlib | |
| import time | |
| BASE = pathlib.Path(__file__).resolve().parents[1] | |
| CACHE_DIR = BASE / "cache" | |
| TTL_SECONDS = 24 * 60 * 60 | |
| def _path(tender_id: str) -> pathlib.Path: | |
| CACHE_DIR.mkdir(parents=True, exist_ok=True) | |
| return CACHE_DIR / f"{tender_id}.json" | |
| def save_cache(tender_id: str, data: dict) -> str: | |
| payload = {"saved_at": time.time(), "tender_id": tender_id, "data": data} | |
| p = _path(tender_id) | |
| p.write_text(json.dumps(payload, indent=2, ensure_ascii=False), encoding="utf-8") | |
| return str(p) | |
| def load_cache(tender_id: str, ttl_seconds: int = TTL_SECONDS) -> dict | None: | |
| p = _path(tender_id) | |
| if not p.exists(): | |
| return None | |
| payload = json.loads(p.read_text(encoding="utf-8")) | |
| if time.time() - payload.get("saved_at", 0) > ttl_seconds: | |
| return None | |
| return payload.get("data") | |
| def list_cached_tenders() -> list[dict]: | |
| CACHE_DIR.mkdir(parents=True, exist_ok=True) | |
| rows = [] | |
| for p in sorted(CACHE_DIR.glob("*.json")): | |
| try: | |
| payload = json.loads(p.read_text(encoding="utf-8")) | |
| rows.append({"tender_id": payload.get("tender_id", p.stem), "saved_at": payload.get("saved_at", 0)}) | |
| except Exception: | |
| continue | |
| return rows | |