"""Record the BGG XML fixtures the test suite replays. Runs the real resolve logic with the cache pointed at tests/fixtures/ bgg_cache/, so exactly the responses resolve needs get recorded (live, rate-limited). Run once; commit the fixtures. Re-running only fetches whatever is not already recorded. Usage: uv run python scripts/record_fixtures.py """ from __future__ import annotations import os from pathlib import Path from fixture_common import FIXTURE_CACHE from bggpipe.bgg_client import BGGClient from bggpipe.resolve import load_titles, resolve_entry def main() -> None: if not os.environ.get("BGG_API_TOKEN"): raise SystemExit( "BGG_API_TOKEN is not set. The XML API requires a registered " "application token (https://boardgamegeek.com/applications). " "Until one exists, the committed fixtures are the hand-crafted " "stubs from scripts/write_stub_fixtures.py; delete " f"{FIXTURE_CACHE} and re-run this script to replace them with " "real recordings." ) client = BGGClient(cache_dir=FIXTURE_CACHE) for entry in load_titles(Path("tests/data/titles.json")): row = resolve_entry(client, entry) print( f"{entry.title_raw!r}: {row.match_status} " f"{row.bgg_name or '-'} ({row.bgg_id or '-'}) {row.version_status}" ) print(f"\nFixtures recorded in {FIXTURE_CACHE}:") for f in sorted(FIXTURE_CACHE.iterdir()): print(f" {f.name}") if __name__ == "__main__": main()