def main(output_file, input_files): combined = {} for filename in input_files: with open(filename, "r") as fid: for line in fid: dr = DetectorResult.from_json(line.strip()) if dr.filename in combined: if dr.dialect == combined[dr.filename].dialect: # allow it if the dialect is the same continue else: raise KeyError("Duplicate result for file: %s" % dr.filename) combined[dr.filename] = dr with open(output_file, "w") as fid: for filename in sorted(combined.keys()): dr = combined[filename] dr.original_detector = dr.detector dr.detector = "reference" fid.write(dr.to_json() + "\n")
def load_detector_results(result_file): """ Load the results from a given detector result file. Verify each record in the process. """ detector_names = set() results = {} with open(result_file, "r") as fid: for idx, line in enumerate(fid.readlines()): try: record = DetectorResult.from_json(line.strip()) except json.JSONDecodeError: print( "\nError parsing the following record in file (line %i): " "%s\n---\n%s" % (idx + 1, result_file, line.strip())) raise SystemExit(1) detector_names.add(record.detector) fname = record.filename if not os.path.isabs(fname): fname = os.path.abspath(fname) record.filename = fname if fname in results: raise ValueError( "Duplicate result for file %s in detector file %s" % (record.filename, result_file)) record.validate() results[fname] = record if len(detector_names) > 1: raise ValueError("More than one detector name in file: %s" % result_file) detector = detector_names.pop() return detector, results