parsedmarc/__init__.py
def save_output(results, output_directory="output"):
    """
    Save report data in the given directory

    Args:
        results (OrderedDict): Parsing results
        output_directory: The patch to the directory to save in
    """

    aggregate_reports = results["aggregate_reports"]
    forensic_reports = results["forensic_reports"]

    if os.path.exists(output_directory):
        if not os.path.isdir(output_directory):
            raise ValueError("{0} is not a directory".format(output_directory))
    else:
        os.makedirs(output_directory)

    with open("{0}".format(os.path.join(output_directory, "aggregate.json")),
              "w", newline="\n", encoding="utf-8") as agg_json:
        agg_json.write(json.dumps(aggregate_reports, ensure_ascii=False,
                                  indent=2))

    with open("{0}".format(os.path.join(output_directory, "aggregate.csv")),
              "w", newline="\n", encoding="utf-8") as agg_csv:
        csv = parsed_aggregate_reports_to_csv(aggregate_reports)
        agg_csv.write(csv)

    with open("{0}".format(os.path.join(output_directory, "forensic.json")),
              "w", newline="\n", encoding="utf-8") as for_json:
        for_json.write(json.dumps(forensic_reports, ensure_ascii=False,
                                  indent=2))

    with open("{0}".format(os.path.join(output_directory, "forensic.csv")),
              "w", newline="\n", encoding="utf-8") as for_csv:
        csv = parsed_forensic_reports_to_csv(forensic_reports)
        for_csv.write(csv)

    samples_directory = os.path.join(output_directory, "samples")
    if not os.path.exists(samples_directory):
        os.makedirs(samples_directory)

    sample_filenames = []
    for forensic_report in forensic_reports:
        sample = forensic_report["sample"]
        message_count = 0
        parsed_sample = forensic_report["parsed_sample"]
        subject = parsed_sample["filename_safe_subject"]
        filename = subject

        while filename in sample_filenames:
            message_count += 1
            filename = "{0} ({1})".format(subject, message_count)

        sample_filenames.append(filename)

        filename = "{0}.eml".format(filename)
        path = os.path.join(samples_directory, filename)
        with open(path, "w", newline="\n", encoding="utf-8") as sample_file:
            sample_file.write(sample)
def save_output(results, output_directory="output"):
    aggregate_reports = results["aggregate_reports"]
    forensic_reports = results["forensic_reports"]

    if os.path.exists(output_directory):
        if not os.path.isdir(output_directory):
            raise ValueError("{0} is not a directory".format(output_directory))
    else:
        os.makedirs(output_directory)

    with open("{0}".format(os.path.join(output_directory, "aggregate.json")),
              "w", newline="\n", encoding="utf-8") as agg_json:
        agg_json.write(json.dumps(aggregate_reports, ensure_ascii=False,
                                  indent=2))

    with open("{0}".format(os.path.join(output_directory, "aggregate.csv")),
              "w", newline="\n", encoding="utf-8") as agg_csv:
        csv = parsed_aggregate_reports_to_csv(aggregate_reports)
        agg_csv.write(csv)

    with open("{0}".format(os.path.join(output_directory, "forensic.json")),
              "w", newline="\n", encoding="utf-8") as for_json:
        for_json.write(json.dumps(forensic_reports, ensure_ascii=False,
                                  indent=2))

    with open("{0}".format(os.path.join(output_directory, "forensic.csv")),
              "w", newline="\n", encoding="utf-8") as for_csv:
        csv = parsed_forensic_reports_to_csv(forensic_reports)
        for_csv.write(csv)

    samples_directory = os.path.join(output_directory, "samples")
    if not os.path.exists(samples_directory):
        os.makedirs(samples_directory)

    sample_filenames = []
    for forensic_report in forensic_reports:
        sample = forensic_report["sample"]
        message_count = 0
        parsed_sample = forensic_report["parsed_sample"]
        subject = parsed_sample["filename_safe_subject"]
        filename = subject

        while filename in sample_filenames:
            message_count += 1
            filename = "{0} ({1})".format(subject, message_count)

        sample_filenames.append(filename)

        filename = "{0}.eml".format(filename)
        path = os.path.join(samples_directory, filename)
        with open(path, "w", newline="\n", encoding="utf-8") as sample_file:
            sample_file.write(sample)
def save_output ( results , output_directory = "output" ) : aggregate_reports = results [ "aggregate_reports" ] forensic_reports = results [ "forensic_reports" ] if os . path . exists ( output_directory ) : if not os . path . isdir ( output_directory ) : raise ValueError ( "{0} is not a directory" . format ( output_directory ) ) else : os . makedirs ( output_directory ) with open ( "{0}" . format ( os . path . join ( output_directory , "aggregate.json" ) ) , "w" , newline = "\n" , encoding = "utf-8" ) as agg_json : agg_json . write ( json . dumps ( aggregate_reports , ensure_ascii = False , indent = 2 ) ) with open ( "{0}" . format ( os . path . join ( output_directory , "aggregate.csv" ) ) , "w" , newline = "\n" , encoding = "utf-8" ) as agg_csv : csv = parsed_aggregate_reports_to_csv ( aggregate_reports ) agg_csv . write ( csv ) with open ( "{0}" . format ( os . path . join ( output_directory , "forensic.json" ) ) , "w" , newline = "\n" , encoding = "utf-8" ) as for_json : for_json . write ( json . dumps ( forensic_reports , ensure_ascii = False , indent = 2 ) ) with open ( "{0}" . format ( os . path . join ( output_directory , "forensic.csv" ) ) , "w" , newline = "\n" , encoding = "utf-8" ) as for_csv : csv = parsed_forensic_reports_to_csv ( forensic_reports ) for_csv . write ( csv ) samples_directory = os . path . join ( output_directory , "samples" ) if not os . path . exists ( samples_directory ) : os . makedirs ( samples_directory ) sample_filenames = [ ] for forensic_report in forensic_reports : sample = forensic_report [ "sample" ] message_count = 0 parsed_sample = forensic_report [ "parsed_sample" ] subject = parsed_sample [ "filename_safe_subject" ] filename = subject while filename in sample_filenames : message_count += 1 filename = "{0} ({1})" . format ( subject , message_count ) sample_filenames . append ( filename ) filename = "{0}.eml" . format ( filename ) path = os . path . join ( samples_directory , filename ) with open ( path , "w" , newline = "\n" , encoding = "utf-8" ) as sample_file : sample_file . write ( sample )
Save report data in the given directory

    Args:
        results (OrderedDict): Parsing results
        output_directory: The patch to the directory to save in
Save report data in the given directory