mirror of
https://github.com/sebastiandine/Card-Collection-Manager-3.git
synced 2026-08-28 22:01:12 +00:00
115 lines
3.6 KiB
Python
115 lines
3.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Merge classic TCGdex-missing JA products into pokemon_jp_en_catalog.json.
|
|
|
|
Reads:
|
|
tools/pokemon_jp/classic_missing_sets.json
|
|
tools/pokemon_jp/classic_missing_prints.json
|
|
tools/pokemon_jp/set_en_names.json (updated with EN display names)
|
|
|
|
Writes set metadata + prints into ui_wx/assets/pokemon_jp_en_catalog.json
|
|
without dropping existing TCGdex-backed entries. Replaces prior prints for
|
|
the same (set_id, local_id) keys from classic_missing_prints.json.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
HERE = Path(__file__).resolve().parent
|
|
SETS = HERE / "classic_missing_sets.json"
|
|
PRINTS = HERE / "classic_missing_prints.json"
|
|
EN_MAP = HERE / "set_en_names.json"
|
|
OUT = ROOT / "ui_wx" / "assets" / "pokemon_jp_en_catalog.json"
|
|
|
|
# Classic gym-deck / sheet products use synthetic set ids (not on TCGdex).
|
|
CLASSIC_SET_IDS = frozenset(
|
|
{
|
|
"UnnumberedPromo",
|
|
"ExpSheet1",
|
|
"ExpSheet2",
|
|
"ExpSheet3",
|
|
"NiviCG",
|
|
"HanadaCG",
|
|
"KuchibaCG",
|
|
"TamamushiCG",
|
|
"YamabukiCG",
|
|
"GurenTG",
|
|
"SouthernIslands",
|
|
}
|
|
)
|
|
|
|
GYM_DECK_SET_IDS = frozenset(
|
|
{"NiviCG", "HanadaCG", "KuchibaCG", "TamamushiCG", "YamabukiCG", "GurenTG"}
|
|
)
|
|
|
|
|
|
def strip_gym_deck_donor_ids(classic_prints: list[dict]) -> int:
|
|
"""Remove PMCG donor ids; gym-deck exclusives need printing-accurate art."""
|
|
stripped = 0
|
|
for p in classic_prints:
|
|
sid = str(p.get("set_id") or "")
|
|
if sid not in GYM_DECK_SET_IDS:
|
|
continue
|
|
if p.get("image_url"):
|
|
p.pop("tcgplayer_id", None)
|
|
continue
|
|
if p.pop("tcgplayer_id", None) is not None:
|
|
stripped += 1
|
|
return stripped
|
|
|
|
|
|
def main() -> None:
|
|
missing_sets: dict[str, dict] = json.loads(SETS.read_text(encoding="utf-8"))
|
|
missing_prints: list[dict] = json.loads(PRINTS.read_text(encoding="utf-8"))
|
|
en_map: dict[str, str] = json.loads(EN_MAP.read_text(encoding="utf-8"))
|
|
|
|
catalog: dict = {"sets": {}, "prints": []}
|
|
if OUT.exists():
|
|
catalog = json.loads(OUT.read_text(encoding="utf-8"))
|
|
|
|
sets_obj: dict = catalog.setdefault("sets", {})
|
|
for sid, meta in missing_sets.items():
|
|
name_en = str(meta.get("name_en") or "").strip() or sid
|
|
en_map[sid] = name_en
|
|
sets_obj[sid] = {
|
|
"name_en": name_en,
|
|
"name_ja": str(meta.get("name_ja") or ""),
|
|
"releaseDate": str(meta.get("releaseDate") or ""),
|
|
}
|
|
|
|
EN_MAP.write_text(
|
|
json.dumps(dict(sorted(en_map.items())), ensure_ascii=False, indent=2) + "\n",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
classic_ids = {s for s in missing_sets}
|
|
classic_keys = {
|
|
(str(p.get("set_id")), str(p.get("local_id"))) for p in missing_prints
|
|
}
|
|
existing: list[dict] = catalog.get("prints") or []
|
|
kept = [
|
|
p
|
|
for p in existing
|
|
if (str(p.get("set_id")), str(p.get("local_id"))) not in classic_keys
|
|
or str(p.get("set_id")) not in classic_ids
|
|
]
|
|
# Drop all prints for classic set ids, then append the curated list.
|
|
kept = [p for p in kept if str(p.get("set_id")) not in classic_ids]
|
|
stripped = strip_gym_deck_donor_ids(missing_prints)
|
|
kept.extend(missing_prints)
|
|
catalog["prints"] = kept
|
|
|
|
OUT.write_text(
|
|
json.dumps(catalog, ensure_ascii=False, indent=2) + "\n", encoding="utf-8"
|
|
)
|
|
print(
|
|
f"merged {len(missing_sets)} classic sets and {len(missing_prints)} prints "
|
|
f"into {OUT} (total prints={len(kept)}, gym donor ids stripped={stripped})"
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|