parsedmarc/__init__.py
def parse_report_file(input_, nameservers=None, dns_timeout=2.0,
                      strip_attachment_payloads=False, parallel=False):
    """Parses a DMARC aggregate or forensic file at the given path, a
    file-like object. or bytes

    Args:
        input_: A path to a file, a file like object, or bytes
        nameservers (list): A list of one or more nameservers to use
        (Cloudflare's public DNS resolvers by default)
        dns_timeout (float): Sets the DNS timeout in seconds
        strip_attachment_payloads (bool): Remove attachment payloads from
        forensic report results
        parallel (bool): Parallel processing

    Returns:
        OrderedDict: The parsed DMARC report
    """
    if type(input_) == str:
        file_object = open(input_, "rb")
    elif type(input_) == bytes:
        file_object = BytesIO(input_)
    else:
        file_object = input_

    content = file_object.read()
    try:
        report = parse_aggregate_report_file(content, nameservers=nameservers,
                                             dns_timeout=dns_timeout,
                                             parallel=parallel)
        results = OrderedDict([("report_type", "aggregate"),
                               ("report", report)])
    except InvalidAggregateReport:
        try:
            sa = strip_attachment_payloads
            results = parse_report_email(content,
                                         nameservers=nameservers,
                                         dns_timeout=dns_timeout,
                                         strip_attachment_payloads=sa,
                                         parallel=parallel)
        except InvalidDMARCReport:
            raise InvalidDMARCReport("Not a valid aggregate or forensic "
                                     "report")
    return results
def parse_report_file(input_, nameservers=None, dns_timeout=2.0,
                      strip_attachment_payloads=False, parallel=False):
    if type(input_) == str:
        file_object = open(input_, "rb")
    elif type(input_) == bytes:
        file_object = BytesIO(input_)
    else:
        file_object = input_

    content = file_object.read()
    try:
        report = parse_aggregate_report_file(content, nameservers=nameservers,
                                             dns_timeout=dns_timeout,
                                             parallel=parallel)
        results = OrderedDict([("report_type", "aggregate"),
                               ("report", report)])
    except InvalidAggregateReport:
        try:
            sa = strip_attachment_payloads
            results = parse_report_email(content,
                                         nameservers=nameservers,
                                         dns_timeout=dns_timeout,
                                         strip_attachment_payloads=sa,
                                         parallel=parallel)
        except InvalidDMARCReport:
            raise InvalidDMARCReport("Not a valid aggregate or forensic "
                                     "report")
    return results
def parse_report_file ( input_ , nameservers = None , dns_timeout = 2.0 , strip_attachment_payloads = False , parallel = False ) : if type ( input_ ) == str : file_object = open ( input_ , "rb" ) elif type ( input_ ) == bytes : file_object = BytesIO ( input_ ) else : file_object = input_ content = file_object . read ( ) try : report = parse_aggregate_report_file ( content , nameservers = nameservers , dns_timeout = dns_timeout , parallel = parallel ) results = OrderedDict ( [ ( "report_type" , "aggregate" ) , ( "report" , report ) ] ) except InvalidAggregateReport : try : sa = strip_attachment_payloads results = parse_report_email ( content , nameservers = nameservers , dns_timeout = dns_timeout , strip_attachment_payloads = sa , parallel = parallel ) except InvalidDMARCReport : raise InvalidDMARCReport ( "Not a valid aggregate or forensic " "report" ) return results
Parses a DMARC aggregate or forensic file at the given path, a
    file-like object. or bytes

    Args:
        input_: A path to a file, a file like object, or bytes
        nameservers (list): A list of one or more nameservers to use
        (Cloudflare's public DNS resolvers by default)
        dns_timeout (float): Sets the DNS timeout in seconds
        strip_attachment_payloads (bool): Remove attachment payloads from
        forensic report results
        parallel (bool): Parallel processing

    Returns:
        OrderedDict: The parsed DMARC report
Parses a DMARC aggregate or forensic file at the given path a file - like object . or bytes