Skip to content

Commit 997dc1c

Browse files
committed
convert error repors functions to a module
1 parent ca1e5c1 commit 997dc1c

File tree

5 files changed

+45
-36
lines changed

5 files changed

+45
-36
lines changed

lambdas/shared/src/common/validator/reporter/__init__.py renamed to lambdas/shared/src/common/validator/error_report/__init__.py

File renamed without changes.

lambdas/shared/src/common/validator/reporter/dq_reporter.py renamed to lambdas/shared/src/common/validator/error_report/dq_reporter.py

File renamed without changes.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from common.validator.error_report.dq_reporter import DQReporter
2+
from common.validator.record_error import ErrorReport
3+
from src.common.validator.constants.enums import ErrorLevels
4+
5+
6+
# Collect and add error record to the list
7+
def add_error_record(
8+
error_records: list[ErrorReport],
9+
error_record: ErrorReport,
10+
expression_error_group: str,
11+
expression_name: str,
12+
expression_id: str,
13+
error_level: ErrorLevels,
14+
) -> None:
15+
if error_record is not None:
16+
error_record.error_group = expression_error_group
17+
error_record.name = expression_name
18+
error_record.id = expression_id
19+
error_record.error_level = error_level
20+
error_records.append(error_record)
21+
22+
23+
# Function to help identify a parent failure in the error list
24+
def check_error_record_for_fail(expression_identifier: str, error_records: list[ErrorReport]) -> bool:
25+
for error_record in error_records:
26+
if error_record.id == expression_identifier:
27+
return True
28+
return False
29+
30+
31+
def build_error_report(event_id: str, data_parser: dict, error_records: list[ErrorReport]) -> dict:
32+
occurrence_date_time = data_parser.get_fhir_value("occurrenceDateTime")
33+
dq_reporter = DQReporter()
34+
return dq_reporter.generate_error_report(event_id, occurrence_date_time, error_records)
35+
36+
37+
def has_validation_failed(error_records: list[ErrorReport]) -> bool:
38+
return any(er.error_level == ErrorLevels.CRITICAL_ERROR for er in error_records)

lambdas/shared/src/common/validator/validator.py

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,17 @@
66
"""
77

88
from common.validator.constants.enums import MESSAGES, DataType, ErrorLevels, ExceptionLevels
9+
from common.validator.error_report.error_reporter import add_error_record, check_error_record_for_fail
910
from common.validator.expression_checker import ExpressionChecker
1011
from common.validator.parsers.fetch_parsers import FetchParsers
1112
from common.validator.record_error import ErrorReport
12-
from common.validator.reporter.dq_reporter import DQReporter
1313

1414

1515
class Validator:
1616
def __init__(self, schema_file=""):
1717
self.schema_file = schema_file
1818
self.get_data_from_parsers = FetchParsers()
1919

20-
# Collect and add error record to the list
21-
def _add_error_record(
22-
self,
23-
error_records: list[ErrorReport],
24-
error_record: ErrorReport,
25-
expression_error_group: str,
26-
expression_name: str,
27-
expression_id: str,
28-
error_level: ErrorLevels,
29-
) -> None:
30-
if error_record is not None:
31-
error_record.error_group = expression_error_group
32-
error_record.name = expression_name
33-
error_record.id = expression_id
34-
error_record.error_level = error_level
35-
error_records.append(error_record)
36-
37-
# Function to help identify a parent failure in the error list
38-
def _check_error_record_for_fail(self, expression_identifier: str, error_records: list[ErrorReport]) -> bool:
39-
for error_record in error_records:
40-
if error_record.id == expression_identifier:
41-
return True
42-
return False
43-
4420
# validate a single expression against the data file
4521
def _validate_expression(
4622
self,
@@ -64,12 +40,12 @@ def _validate_expression(
6440
# Check to see if the expression has a parent, if so did the parent validate
6541
if "parentExpression" in expression:
6642
parent_expression = expression["parentExpression"]
67-
if self._check_error_record_for_fail(parent_expression, error_records):
43+
if check_error_record_for_fail(parent_expression, error_records):
6844
error_record = ErrorReport(
6945
code=ExceptionLevels.PARENT_FAILED,
7046
message=MESSAGES[ExceptionLevels.PARENT_FAILED] + ", Parent ID: " + parent_expression,
7147
)
72-
self._add_error_record(
48+
add_error_record(
7349
error_records, error_record, expression_error_group, expression_name, expression_id, error_level
7450
)
7551
return
@@ -80,7 +56,7 @@ def _validate_expression(
8056
message = f"Data get values Unexpected exception [{e.__class__.__name__}]: {e}"
8157
error_record = ErrorReport(code=ExceptionLevels.PARSING_ERROR, message=message)
8258
# original code had self.CriticalErrorLevel. Replaced with error_level
83-
self._add_error_record(
59+
add_error_record(
8460
error_records, error_record, expression_error_group, expression_name, expression_id, error_level
8561
)
8662
return
@@ -91,7 +67,7 @@ def _validate_expression(
9167
expression_type, expression_rule, expression_fieldname, value, row
9268
)
9369
if error_record is not None:
94-
self._add_error_record(
70+
add_error_record(
9571
error_records, error_record, expression_error_group, expression_name, expression_id, error_level
9672
)
9773
except Exception:
@@ -185,11 +161,5 @@ def run_validation(
185161

186162
return error_records
187163

188-
# Build the error Report
189-
def build_error_report(self, event_id: str, data_parser: dict, error_records: list[ErrorReport]) -> dict:
190-
occurrence_date_time = data_parser.get_fhir_value("occurrenceDateTime")
191-
dq_reporter = DQReporter()
192-
return dq_reporter.generate_error_report(event_id, occurrence_date_time, error_records)
193-
194164
def has_validation_failed(self, error_records: list[ErrorReport]) -> bool:
195165
return any(er.error_level == ErrorLevels.CRITICAL_ERROR for er in error_records)

lambdas/shared/tests/test_common/validator/test_application_fhir.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from pathlib import Path
55
from unittest.mock import Mock
66

7+
from common.validator.error_report.error_reporter import build_error_report
78
from common.validator.validator import Validator
89
from tests.test_common.validator.testing_utils.csv_fhir_utils import parse_test_file
910

@@ -25,7 +26,7 @@ def test_validation(self):
2526

2627
validator = Validator(SchemaFile) # FHIR File Path not needed
2728
error_list = validator.validate_fhir(self.fhir_resources, True, True, True)
28-
error_report = validator.build_error_report(
29+
error_report = build_error_report(
2930
"25a8cc4d-1875-4191-ac6d-2d63a0ebc64b", fhir_parser, error_list
3031
) # include eventID if known
3132

0 commit comments

Comments
 (0)