|
@@ -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")
|