浏览代码

Add logic to db merge to update trait tags

Kirk Trombley 2 年之前
父节点
当前提交
4dc198e086
共有 1 个文件被更改,包括 42 次插入8 次删除
  1. 42 8
      tools/merge-db.py

+ 42 - 8
tools/merge-db.py

@@ -1,5 +1,6 @@
-from sys import argv
 import json
+from argparse import ArgumentParser
+from pathlib import Path
 
 
 def read(f: str) -> dict[str, dict]:
@@ -12,10 +13,38 @@ def read(f: str) -> dict[str, dict]:
     }
 
 
-_, new, old = argv
+parser = ArgumentParser(
+  prog="DB Merger",
+  description="Merge database files",
+)
+parser.add_argument(
+  "-d", "--pokedex", help="Pokedex file"
+)
+parser.add_argument(
+  "-o", "--output", default="data/latest.db", help="Output database file"
+)
+parser.add_argument("sources", metavar="file", type=Path, nargs="+")
+
+args = parser.parse_args()
+
+db = {}
+for s in args.sources:
+  db.update(read(s))
+
+if args.pokedex is not None:
+  with open(args.pokedex) as dex_file:
+    dex = json.load(dex_file)
+  for name, info in db.items():
+    traits = next(
+      f["traits"]
+      for f in dex[str(info["num"])]["forms"]
+      if f["name"] == name
+    )
+    db[name] = {
+      **info,
+      "traits": sorted(set([*info["traits"], *traits])),
+    }
 
-db = read(old)
-db.update(read(new))
 output = [
   f"  {json.dumps(s)},\n"
   for s in sorted(
@@ -23,7 +52,12 @@ output = [
     key=lambda x: (x["num"], x["name"])
   )
 ]
-with open(old, "w") as outfile:
-  outfile.write("const database = [\n")
-  outfile.writelines(output)
-  outfile.write("]\n")
+
+if args.output == "-":
+  for o in output:
+    print(o)
+else:
+  with open(args.output, "w") as outfile:
+    outfile.write("const database = [\n")
+    outfile.writelines(output)
+    outfile.write("]\n")