import argparse import csv from pathlib import Path from ee import EeException from ee.db import ObjDb from ee.part import Part, load_db, save_db, PartDb def work(in_path: Path, out_path: Path, work_dir: Path): in_parts: ObjDb[Part] = ObjDb[Part]() uri_idx = in_parts.add_unique_index("uri", lambda p: p.uri) for entry in load_db(in_path).parts: in_parts.add(Part(entry.part)) out_parts = PartDb() for part in in_parts: out_parts.add_entry(part, False) with (work_dir / "out" / "fact.csv").open("r") as f: reader = csv.reader(f, dialect="excel-tab") for uri, key, value in reader: try: part = uri_idx.get_single(uri) except KeyError: raise EeException("Unknown part found in output: uri={}".format(uri)) old_value = part.facts.get_value(key) if old_value is None: print("New fact for {}: {}={}".format(uri, key, value)) part.facts.add(key, value) save_db(out_path, out_parts) parser = argparse.ArgumentParser() parser.add_argument("--in", dest="in_path", required=True, metavar="PART DB") parser.add_argument("--out", required=True, metavar="PART DB") parser.add_argument("--work", required=True, metavar="DIR") args = parser.parse_args() work(Path(args.in_path), Path(args.out), Path(args.work))