diff --git a/parsedmarc/__init__.py b/parsedmarc/__init__.py index c46c1e2..cfa19d2 100644 --- a/parsedmarc/__init__.py +++ b/parsedmarc/__init__.py @@ -254,6 +254,13 @@ def parse_aggregate_report_xml(xml, ip_db_path=None, offline=False, new_org_name = get_base_domain(org_name) if new_org_name is not None: org_name = new_org_name + if not org_name: + logger.debug("Could not parse org_name from XML.\r\n{0}".format( + report.__str__() + )) + raise KeyError("Organization name is missing. \ + This field is a requirement for \ + saving the report") new_report_metadata["org_name"] = org_name new_report_metadata["org_email"] = report_metadata["email"] extra = None @@ -368,13 +375,14 @@ def extract_xml(input_): str: The extracted XML """ - if type(input_) == str: - file_object = open(input_, "rb") - elif type(input_) == bytes: - file_object = BytesIO(input_) - else: - file_object = input_ try: + if type(input_) == str: + file_object = open(input_, "rb") + elif type(input_) == bytes: + file_object = BytesIO(input_) + else: + file_object = input_ + header = file_object.read(6) file_object.seek(0) if header.startswith(MAGIC_ZIP): @@ -390,6 +398,8 @@ def extract_xml(input_): file_object.close() + except FileNotFoundError: + raise InvalidAggregateReport("File was not found") except UnicodeDecodeError: file_object.close() raise InvalidAggregateReport("File objects must be opened in binary " diff --git a/parsedmarc/cli.py b/parsedmarc/cli.py index 42dae36..c76a2d7 100644 --- a/parsedmarc/cli.py +++ b/parsedmarc/cli.py @@ -101,6 +101,9 @@ def _main(): except elastic.ElasticsearchError as error_: logger.error("Elasticsearch Error: {0}".format( error_.__str__())) + except Exception as error_: + logger.error("Elasticsearch exception error: {}".format( + error_.__str__())) try: if opts.kafka_hosts: kafka_client.save_aggregate_reports_to_kafka( diff --git a/parsedmarc/elastic.py b/parsedmarc/elastic.py index 80f9f09..bfc2925 100644 --- a/parsedmarc/elastic.py +++ b/parsedmarc/elastic.py @@ -327,7 +327,12 @@ def save_aggregate_report_to_elasticsearch(aggregate_report, query = query & begin_date_query & end_date_query search.query = query - existing = search.execute() + try: + existing = search.execute() + except Exception as error_: + raise ElasticsearchError("Elasticsearch's search for existing report \ + error: {}".format(error_.__str__())) + if len(existing) > 0: raise AlreadySaved("An aggregate report ID {0} from {1} about {2} " "with a date range of {3} UTC to {4} UTC already "