Esempio n. 1
0
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")
Esempio n. 2
0
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