Files
tft/backend/tft/staticdata/fetch.py
2026-07-23 00:23:10 +02:00

56 lines
1.7 KiB
Python

"""Download TFT static data from Community Dragon and normalize it."""
import json
from datetime import date
import requests
from tft import paths
from tft.staticdata.parse import parse
CDRAGON = "https://raw.communitydragon.org/latest"
METADATA_URL = f"{CDRAGON}/content-metadata.json"
TFT_DATA_URL = f"{CDRAGON}/cdragon/tft/en_us.json"
def fetch_static(set_override: int | None = None) -> dict:
meta = requests.get(METADATA_URL, timeout=30)
meta.raise_for_status()
version = meta.json()["version"]
patch = ".".join(version.split(".")[:2])
resp = requests.get(TFT_DATA_URL, timeout=120)
resp.raise_for_status()
raw = resp.json()
parsed = parse(raw, set_override=set_override)
set_number = parsed["meta"]["set"]
out_dir = paths.static_dir(set_number, patch)
out_dir.mkdir(parents=True, exist_ok=True)
(out_dir / "raw.json").write_text(json.dumps(raw))
parsed["meta"]["patch"] = patch
parsed["meta"]["game_version"] = version
parsed["meta"]["fetched_at"] = date.today().isoformat()
for name in ("units", "traits", "items", "augments", "meta"):
(out_dir / f"{name}.json").write_text(
json.dumps(parsed[name], indent=1, ensure_ascii=False)
)
pointer = {"set": set_number, "patch": patch, "dir": str(out_dir)}
paths.latest_static_pointer().write_text(json.dumps(pointer, indent=1))
return parsed
def load_static() -> dict:
"""Load the most recently fetched static data."""
from pathlib import Path
pointer = json.loads(paths.latest_static_pointer().read_text())
static_dir = Path(pointer["dir"])
return {
name: json.loads((static_dir / f"{name}.json").read_text())
for name in ("units", "traits", "items", "augments", "meta")
}