Skip to content

Commit d441a4a

Browse files
committed
Remove unused switch. Tidy up error handling in Converter init.
1 parent 2bcf49e commit d441a4a

3 files changed

Lines changed: 34 additions & 91 deletions

File tree

delta_backend/src/converter.py

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,16 @@
66

77
class Converter:
88

9-
def __init__(self, fhir_data, action_flag = ActionFlag.UPDATE, report_unexpected_exception=True):
9+
def __init__(self, fhir_data, action_flag = ActionFlag.UPDATE):
1010
self.converted = {}
1111
self.error_records = []
1212
self.action_flag = action_flag
13-
self.report_unexpected_exception = report_unexpected_exception
1413

15-
try:
16-
if not fhir_data:
17-
raise ValueError("FHIR data is required for initialization.")
14+
if not fhir_data:
15+
raise ValueError("FHIR data is required for initialization.")
1816

19-
self.extractor = Extractor(fhir_data, self.report_unexpected_exception)
20-
self.conversion_layout = ConversionLayout(self.extractor)
21-
except Exception as e:
22-
if report_unexpected_exception:
23-
self._log_error(None, None, f"Initialization failed: [{e.__class__.__name__}] {e}")
24-
raise
17+
self.extractor = Extractor(fhir_data)
18+
self.conversion_layout = ConversionLayout(self.extractor)
2519

2620
def run_conversion(self):
2721
conversions = self.conversion_layout.get_conversion_layout()
@@ -44,26 +38,21 @@ def _convert_data(self, conversion: ConversionField):
4438
converted = conversion.expression_rule()
4539
if converted is not None:
4640
self.converted[flat_field] = converted
47-
4841
except Exception as e:
4942
self._log_error(
5043
flat_field,
51-
None,
5244
f"Conversion error [{e.__class__.__name__}]: {e}",
5345
code=exception_messages.PARSING_ERROR
5446
)
5547
self.converted[flat_field] = ""
5648

57-
def _log_error(self, field_name, field_value, e, code=exception_messages.UNEXPECTED_EXCEPTION):
58-
error_obj = {
49+
def _log_error(self, field_name, e, code):
50+
self.error_records.append({
5951
"code": code,
6052
"field": field_name,
61-
"value": field_value,
53+
"value": None,
6254
"message": str(e)
63-
}
64-
65-
if self.report_unexpected_exception:
66-
self.error_records.append(error_obj)
55+
})
6756

6857
def get_error_records(self):
6958
return self.error_records

delta_backend/src/extractor.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@ class Extractor:
1919
DATE_CONVERT_FORMAT = "%Y%m%d"
2020
DEFAULT_POSTCODE = "ZZ99 3CZ"
2121

22-
def __init__(self, fhir_json_data, report_unexpected_exception = True):
22+
def __init__(self, fhir_json_data):
2323
self.fhir_json_data = json.loads(fhir_json_data, parse_float=decimal.Decimal) if isinstance(fhir_json_data, str) else fhir_json_data
24-
self.report_unexpected_exception = report_unexpected_exception
2524
self.error_records = []
2625

2726
def _get_patient(self):
@@ -163,18 +162,17 @@ def _get_site_information(self):
163162
return site_code, site_code_type_uri
164163

165164
def _log_error(self, field_name, field_value, e, code=exception_messages.RECORD_CHECK_FAILED):
166-
if self.report_unexpected_exception:
167-
if isinstance(e, Exception):
168-
message = exception_messages.MESSAGES[exception_messages.UNEXPECTED_EXCEPTION] % (e.__class__.__name__, str(e))
169-
else:
170-
message = str(e)
171-
172-
self.error_records.append({
173-
"code": code,
174-
"field": field_name,
175-
"value": field_value,
176-
"message": message
177-
})
165+
if isinstance(e, Exception):
166+
message = exception_messages.MESSAGES[exception_messages.UNEXPECTED_EXCEPTION] % (e.__class__.__name__, str(e))
167+
else:
168+
message = str(e)
169+
170+
self.error_records.append({
171+
"code": code,
172+
"field": field_name,
173+
"value": field_value,
174+
"message": message
175+
})
178176

179177
def _convert_date(self, field_name, date, format) -> str:
180178
"""

delta_backend/tests/test_convert.py

Lines changed: 13 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def setUp(self):
2828
# Start moto AWS mocks
2929
self.mock = mock_aws()
3030
self.mock.start()
31-
31+
3232
"""Set up mock DynamoDB table."""
3333
self.dynamodb_resource = boto3_resource("dynamodb", "eu-west-2")
3434
self.table = self.dynamodb_resource.create_table(
@@ -74,7 +74,7 @@ def tearDown(self):
7474
self.logger_exception_patcher.stop()
7575
self.logger_info_patcher.stop()
7676
self.mock_firehose_logger.stop()
77-
77+
7878
self.mock.stop()
7979

8080
@staticmethod
@@ -126,34 +126,18 @@ def test_fhir_converter_json_direct_data(self):
126126
json_data = json.dumps(ValuesForTests.json_data)
127127

128128
fhir_converter = Converter(json_data)
129-
FlatFile = fhir_converter.run_conversion()
129+
result = fhir_converter.run_conversion()
130130

131-
flatJSON = json.dumps(FlatFile)
131+
result_str = json.dumps(result)
132132
expected_imms_value = deepcopy(ValuesForTests.expected_imms2) # UPDATE is currently the default action-flag
133133
expected_imms = json.dumps(expected_imms_value)
134-
self.assertEqual(flatJSON, expected_imms)
134+
self.assertEqual(result_str, expected_imms)
135135

136-
errorRecords = fhir_converter.get_error_records()
136+
error_records = fhir_converter.get_error_records()
137137

138-
self.assertEqual(len(errorRecords), 0)
139-
140-
def test_fhir_converter_json_direct_data(self):
141-
"""it should convert fhir json data to flat json"""
142-
json_data = json.dumps(ValuesForTests.json_data)
143-
144-
fhir_converter = Converter(json_data)
145-
FlatFile = fhir_converter.run_conversion()
138+
self.assertEqual(len(error_records), 0)
146139

147-
flatJSON = json.dumps(FlatFile)
148-
expected_imms_value = deepcopy(ValuesForTests.expected_imms2) # UPDATE is currently the default action-flag
149-
expected_imms = json.dumps(expected_imms_value)
150-
self.assertEqual(flatJSON, expected_imms)
151-
152-
errorRecords = fhir_converter.get_error_records()
153-
154-
self.assertEqual(len(errorRecords), 0)
155-
156-
def test_fhir_converter_json_error_scenario_reporting_on(self):
140+
def test_fhir_converter_json_error_scenario(self):
157141
"""it should convert fhir json data to flat json - error scenarios"""
158142
error_test_cases = [ErrorValuesForTests.missing_json, ErrorValuesForTests.json_dob_error]
159143

@@ -163,42 +147,18 @@ def test_fhir_converter_json_error_scenario_reporting_on(self):
163147
fhir_converter = Converter(json_data)
164148
fhir_converter.run_conversion()
165149

166-
errorRecords = fhir_converter.get_error_records()
150+
error_records = fhir_converter.get_error_records()
167151

168152
# Check if bad data creates error records
169-
self.assertTrue(len(errorRecords) > 0)
170-
171-
def test_fhir_converter_json_error_scenario_reporting_off(self):
172-
"""it should convert fhir json data to flat json - error scenarios"""
173-
error_test_cases = [ErrorValuesForTests.missing_json, ErrorValuesForTests.json_dob_error]
174-
175-
for test_case in error_test_cases:
176-
json_data = json.dumps(test_case)
177-
178-
fhir_converter = Converter(json_data, report_unexpected_exception=False)
179-
fhir_converter.run_conversion()
180-
181-
errorRecords = fhir_converter.get_error_records()
153+
self.assertTrue(len(error_records) > 0)
182154

183-
# Check if bad data creates error records
184-
self.assertTrue(len(errorRecords) == 0)
185-
186-
def test_fhir_converter_json_incorrect_data_scenario_reporting_on(self):
155+
def test_fhir_converter_json_incorrect_data_scenario(self):
187156
"""it should convert fhir json data to flat json - error scenarios"""
188157

189158
with self.assertRaises(ValueError):
190159
fhir_converter = Converter(None)
191-
errorRecords = fhir_converter.get_error_records()
192-
self.assertTrue(len(errorRecords) > 0)
193-
194-
195-
def test_fhir_converter_json_incorrect_data_scenario_reporting_off(self):
196-
"""it should convert fhir json data to flat json - error scenarios"""
197-
198-
with self.assertRaises(ValueError):
199-
fhir_converter = Converter(None, report_unexpected_exception=False)
200-
errorRecords = fhir_converter.get_error_records()
201-
self.assertTrue(len(errorRecords) == 0)
160+
error_records = fhir_converter.get_error_records()
161+
self.assertTrue(len(error_records) > 0)
202162

203163
def test_handler_imms_convert_to_flat_json(self):
204164
"""Test that the Imms field contains the correct flat JSON data for CREATE, UPDATE, and DELETE operations."""
@@ -231,17 +191,13 @@ def test_handler_imms_convert_to_flat_json(self):
231191
response
232192
)
233193

234-
result = self.table.scan()
235-
items = result.get("Items", [])
236194
self.clear_table()
237195

238196
def clear_table(self):
239197
scan = self.table.scan()
240198
with self.table.batch_writer() as batch:
241199
for item in scan.get("Items", []):
242200
batch.delete_item(Key={"PK": item["PK"]})
243-
result = self.table.scan()
244-
items = result.get("Items", [])
245201

246202
if __name__ == "__main__":
247203
unittest.main()

0 commit comments

Comments
 (0)