Skip to content

Commit 17a4874

Browse files
committed
start uplift schema ticket2
1 parent 05db712 commit 17a4874

File tree

3 files changed

+52
-5
lines changed

3 files changed

+52
-5
lines changed

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ def validate_expression(
2626
match expression_type:
2727
case "DATETIME":
2828
return self._validate_datetime(expression_rule, field_name, field_value, row)
29+
case "STRING":
30+
return self._validate_for_string_values(expression_rule, field_name, field_value, row)
2931
case "DATE":
3032
return self._validate_datetime(expression_rule, field_name, field_value, row)
3133
case "UUID":
@@ -426,6 +428,47 @@ def _validate_empty(self, _expression_rule: str, field_name: str, field_value: s
426428
message = MESSAGES[ExceptionLevels.UNEXPECTED_EXCEPTION] % (e.__class__.__name__, e)
427429
return ErrorReport(ExceptionLevels.UNEXPECTED_EXCEPTION, message, row, field_name, "", self.summarise)
428430

431+
# String Pre-Validation
432+
def _validate_for_string_values(
433+
self, _expression_rule: str, field_name: str, field_value: str, row: dict
434+
) -> ErrorReport:
435+
"""
436+
Apply validation to a string field to ensure it is a non-empty string which meets
437+
the length requirements and predefined values requirements
438+
"""
439+
defined_length: int = (10,)
440+
max_length: int = (None,)
441+
predefined_values: list = (None,)
442+
spaces_allowed: bool = False
443+
try:
444+
if not isinstance(field_value, str):
445+
raise TypeError(f"{field_name} must be a string")
446+
447+
if field_value.isspace():
448+
raise ValueError(f"{field_name} must be a non-empty string")
449+
450+
if defined_length:
451+
if len(field_value) != defined_length:
452+
raise ValueError(f"{field_name} must be {defined_length} characters")
453+
else:
454+
if len(field_value) == 0:
455+
raise ValueError(f"{field_name} must be a non-empty string")
456+
457+
if max_length:
458+
if len(field_value) > max_length:
459+
raise ValueError(f"{field_name} must be {max_length} or fewer characters")
460+
if predefined_values:
461+
if field_value not in predefined_values:
462+
raise ValueError(f"{field_name} must be one of the following: " + str(", ".join(predefined_values)))
463+
464+
if not spaces_allowed:
465+
if " " in field_value:
466+
raise ValueError(f"{field_name} must not contain spaces")
467+
except Exception as e:
468+
if self.report_unexpected_exception:
469+
message = MESSAGES[ExceptionLevels.UNEXPECTED_EXCEPTION] % (e.__class__.__name__, e)
470+
return ErrorReport(ExceptionLevels.UNEXPECTED_EXCEPTION, message, row, field_name, "", self.summarise)
471+
429472
# Not Empty Validate
430473
def _validate_not_empty(self, _expression_rule: str, field_name: str, field_value: str, row: dict) -> ErrorReport:
431474
try:

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,14 @@ def _validate_expression(
7272
add_error_record(
7373
error_records, error_record, expression_error_group, expression_name, expression_id, error_level
7474
)
75-
except Exception:
76-
print(f"Exception validating expression {expression_id} on row {row}: {error_record}")
77-
row += 1
78-
return row
75+
except Exception as e:
76+
message = f"Expression Validation Unexpected exception [{e.__class__.__name__}]: {e}"
77+
error_record = ErrorReport(code=ExceptionLevels.UNEXPECTED_EXCEPTION, message=message)
78+
error_record = ErrorReport(code=ExceptionLevels.PARSING_ERROR, message=message)
79+
add_error_record(
80+
error_records, error_record, expression_error_group, expression_name, expression_id, error_level
81+
)
82+
return
7983

8084
def validate_fhir(
8185
self,

lambdas/shared/tests/test_common/validator/test_schemas/test_schema.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"errorLevel": 0,
1313
"expression": {
1414
"expressionName": "NHS Number Not Empty Check",
15-
"expressionType": "NOTEMPTY",
15+
"expressionType": "STRING",
1616
"expressionRule": ""
1717
},
1818
"errorGroup": "validity"

0 commit comments

Comments
 (0)