Skip to content

Commit 5a780f0

Browse files
committed
validation error
1 parent 9bd9f71 commit 5a780f0

File tree

5 files changed

+26
-26
lines changed

5 files changed

+26
-26
lines changed

.github/workflows/sonarcloud.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
runs-on: ubuntu-latest
1414

1515
steps:
16-
- uses: actions/checkout@v4
16+
- uses: actions/checkout@v5
1717
with:
1818
fetch-depth: 0
1919

@@ -60,7 +60,7 @@ jobs:
6060
continue-on-error: true
6161
run: |
6262
poetry install
63-
poetry run coverage run -m unittest discover -s "./tests" -p "*batch*.py" || echo "recordforwarder tests failed" >> ../failed_tests.txt
63+
poetry run coverage run -m unittest discover -p "*batch*.py" || echo "recordforwarder tests failed" >> ../failed_tests.txt
6464
poetry run coverage xml -o ../recordforwarder-coverage.xml
6565
6666
- name: Run unittest with coverage-ack-lambda

recordprocessor/pyproject.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
[tool.poetry]
2-
name = "filenameprocessor"
3-
version = "0.1.0"
2+
name = "processor"
3+
version = "0.1.0"
44
description = ""
5-
readme = "README.md"
6-
authors = ["Your Name <[email protected]>"]
7-
packages = [{ include = "src" }]
5+
authors = ["Your Name <[email protected]>"]
6+
readme = "README.md"
7+
packages = [{include = "src"}]
88

99
[tool.poetry.dependencies]
1010
python = "~3.11"

recordprocessor/src/batch_processor.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,8 @@ def process_csv_to_fhir(incoming_message_body: dict) -> int:
2525
# and encoder to the incoming message body
2626
incoming_message_body["encoder"] = encoder
2727
interim_message_body = file_level_validation(incoming_message_body=incoming_message_body)
28-
except InvalidEncoding as error:
29-
logger.warning("Invalid Encoding detected in process_csv_to_fhir: %s", error)
30-
# retry with cp1252 encoding
31-
encoder = "cp1252"
32-
try:
33-
incoming_message_body["encoder"] = encoder
34-
interim_message_body = file_level_validation(incoming_message_body=incoming_message_body)
35-
except Exception as error:
36-
logger.error(f"Error in file_level_validation with {encoder} encoding: %s", error)
37-
return 0
38-
except (InvalidHeaders, NoOperationPermissions, Exception): # pylint: disable=broad-exception-caught
28+
except (InvalidHeaders, NoOperationPermissions, Exception) as e: # pylint: disable=broad-exception-caught
29+
logger.error(f"File level validation failed: {e}")
3930
# If the file is invalid, processing should cease immediately
4031
return 0
4132

recordprocessor/src/file_level_validation.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,17 @@ def file_level_validation(incoming_message_body: dict) -> dict:
7979
encoder = incoming_message_body.get("encoder", "utf-8")
8080

8181
# Fetch the data
82-
csv_reader = get_csv_content_dict_reader(file_key, encoder=encoder)
83-
84-
validate_content_headers(csv_reader)
82+
try:
83+
csv_reader = get_csv_content_dict_reader(file_key, encoder=encoder)
84+
validate_content_headers(csv_reader)
85+
except Exception as e:
86+
if hasattr(e, 'reason') and e.reason == "invalid continuation byte" and encoder == "utf-8":
87+
logger.warning("Invalid Encoding detected: %s", e)
88+
# retry with cp1252 encoding
89+
csv_reader = get_csv_content_dict_reader(file_key, encoder="cp1252")
90+
validate_content_headers(csv_reader)
91+
else:
92+
raise
8593

8694
# Validate has permission to perform at least one of the requested actions
8795
allowed_operations_set = get_permitted_operations(supplier, vaccine, permission)

recordprocessor/tests/test_recordprocessor_edge_cases.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def insert_cp1252_at_end(self, data: list[bytes], new_text: bytes, field: int) -
5454
break
5555
return data
5656

57-
def test_process_large_file_with_cp1252(self):
57+
def test_process_large_file_cp1252(self):
5858
""" Test processing a large file with cp1252 encoding """
5959
n_rows = 500
6060
data = self.create_test_data_from_file("test-batch-data.csv")
@@ -79,7 +79,7 @@ def test_process_large_file_with_cp1252(self):
7979
warning_call_args = self.mock_logger_warning.call_args[0][0]
8080
self.assertEqual(warning_call_args, "Processing Error: Invalid continuation byte.")
8181

82-
def test_process_large_file_with_utf8(self):
82+
def test_process_large_file_utf8(self):
8383
""" Test processing a large file with utf-8 encoding """
8484
n_rows = 500
8585
data = self.create_test_data_from_file("test-batch-data.csv")
@@ -101,9 +101,10 @@ def test_process_large_file_with_utf8(self):
101101
self.mock_logger_warning.assert_not_called()
102102
self.mock_logger_error.assert_not_called()
103103

104-
def test_process_cp1252_small_file(self):
104+
def test_process_small_file_cp1252(self):
105105
""" Test processing a small file with cp1252 encoding """
106106
data = self.create_test_data_from_file("test-batch-data-cp1252.csv")
107+
data = self.insert_cp1252_at_end(data, b'D\xe9cembre', 2)
107108
data = [line if line.endswith(b"\n") else line + b"\n" for line in data]
108109
n_rows = len(data) - 1 # Exclude header
109110

@@ -124,9 +125,9 @@ def test_process_cp1252_small_file(self):
124125
self.assertEqual(self.mock_send_to_kinesis.call_count, n_rows)
125126
self.mock_logger_warning.assert_called()
126127
warning_call_args = self.mock_logger_warning.call_args[0][0]
127-
self.assertTrue(warning_call_args.startswith("Invalid Encoding detected in process_csv_to_fhir"))
128+
self.assertTrue(warning_call_args.startswith("Invalid Encoding detected"))
128129

129-
def test_process_utf8_small_file(self):
130+
def test_process_small_file_utf8(self):
130131
""" Test processing a small file with utf-8 encoding """
131132
data = self.create_test_data_from_file("test-batch-data.csv")
132133
data = [line if line.endswith(b"\n") else line + b"\n" for line in data]

0 commit comments

Comments
 (0)