Skip to content

Commit 0e43c96

Browse files
dlzhry2nhsmfjarvis
authored andcommitted
VED-763 Permit ODS code in the filename (#822)
1 parent f5b28cf commit 0e43c96

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

filenameprocessor/src/file_validation.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,23 @@ def validate_file_key(file_key: str) -> tuple[str, str]:
3939
Returns a tuple containing the vaccine_type and supplier (both converted to upper case).
4040
"""
4141

42-
if not match(r"^[^_.]*_[^_.]*_[^_.]*_[^_.]*_[^_.]*\.[^_.]*$", file_key):
43-
error_message = "Initial file validation failed: invalid file key format"
44-
raise InvalidFileKeyError(error_message)
42+
if not match(r"^[^_.]*_[^_.]*_[^_.]*_[^_.]*_[^_.]*", file_key):
43+
raise InvalidFileKeyError("Initial file validation failed: invalid file key format")
4544

4645
file_key = file_key.upper()
47-
file_key_parts_without_extension = file_key.split(".")[0].split("_")
46+
file_name_and_extension = file_key.rsplit(".", 1)
47+
48+
if len(file_name_and_extension) != 2:
49+
raise InvalidFileKeyError("Initial file validation failed: missing file extension")
50+
51+
file_key_parts_without_extension = file_name_and_extension[0].split("_")
4852

4953
vaccine_type = file_key_parts_without_extension[0]
5054
vaccination = file_key_parts_without_extension[1]
5155
version = file_key_parts_without_extension[2]
5256
ods_code = file_key_parts_without_extension[3]
5357
timestamp = file_key_parts_without_extension[4]
54-
extension = file_key.split(".")[1]
58+
extension = file_name_and_extension[1]
5559
supplier = get_supplier_system_from_cache(ods_code)
5660

5761
valid_vaccine_types = get_valid_vaccine_types_from_cache()

filenameprocessor/tests/test_file_key_validation.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ def test_validate_file_key(self, mock_hkeys, mock_hget):
6565
(VALID_FLU_EMIS_FILE_KEY.upper(), "YGM41", ("FLU", "EMIS")),
6666
# Valid RSV/ RAVS file key
6767
(VALID_RSV_RAVS_FILE_KEY, "X8E5B", ("RSV", "RAVS")),
68+
# VED-763 - Some suppliers may include ODS code at end of file for uniqueness
69+
("RSV_Vaccinations_v5_X8E5B_20000101T00000001_ODS123.csv", "X8E5B", ("RSV", "RAVS")),
6870
]
6971

7072
for file_key, ods_code, expected_result in test_cases_for_success_scenarios:
@@ -75,19 +77,20 @@ def test_validate_file_key(self, mock_hkeys, mock_hget):
7577

7678
key_format_error_message = "Initial file validation failed: invalid file key format"
7779
invalid_file_key_error_message = "Initial file validation failed: invalid file key"
80+
missing_file_extension_error_message = "Initial file validation failed: missing file extension"
7881
test_cases_for_failure_scenarios = [
7982
# File key with no '.'
80-
(VALID_FLU_EMIS_FILE_KEY.replace(".", ""), key_format_error_message),
83+
(VALID_FLU_EMIS_FILE_KEY.replace(".", ""), missing_file_extension_error_message),
8184
# File key with additional '.'
8285
(VALID_FLU_EMIS_FILE_KEY[:2] + "." + VALID_FLU_EMIS_FILE_KEY[2:], key_format_error_message),
8386
# File key with additional '_'
84-
(VALID_FLU_EMIS_FILE_KEY[:2] + "_" + VALID_FLU_EMIS_FILE_KEY[2:], key_format_error_message),
87+
(VALID_FLU_EMIS_FILE_KEY[:2] + "_" + VALID_FLU_EMIS_FILE_KEY[2:], invalid_file_key_error_message),
8588
# File key with missing '_'
8689
(VALID_FLU_EMIS_FILE_KEY.replace("_", "", 1), key_format_error_message),
8790
# File key with missing '_'
8891
(VALID_FLU_EMIS_FILE_KEY.replace("_", ""), key_format_error_message),
8992
# File key with missing extension
90-
(VALID_FLU_EMIS_FILE_KEY.replace(".csv", ""), key_format_error_message),
93+
(VALID_FLU_EMIS_FILE_KEY.replace(".csv", ""), missing_file_extension_error_message),
9194
# File key with invalid vaccine type
9295
(VALID_FLU_EMIS_FILE_KEY.replace("FLU", "Flue"), invalid_file_key_error_message),
9396
# File key with missing vaccine type
@@ -110,6 +113,8 @@ def test_validate_file_key(self, mock_hkeys, mock_hget):
110113
(VALID_FLU_EMIS_FILE_KEY.replace("20000101T00000001", ""), invalid_file_key_error_message),
111114
# File key with incorrect extension
112115
(VALID_FLU_EMIS_FILE_KEY.replace(".csv", ".xlsx"), invalid_file_key_error_message),
116+
# File key with ODS code but missing _ in the initial part of file key
117+
("MMR_Vaccinations_v5_DPSFULL20250910T11225000_test.csv", invalid_file_key_error_message)
113118
]
114119

115120
for file_key, expected_result in test_cases_for_failure_scenarios:

0 commit comments

Comments
 (0)