56 lines
1.7 KiB
Python
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")
|
|
}
|