Skip to content

Commit 81b86a5

Browse files
committed
Ready for Handover
1 parent 535e577 commit 81b86a5

25 files changed

+527
-223
lines changed

lambdas/shared/poetry.lock

Lines changed: 31 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lambdas/shared/pyproject.toml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,24 @@ pyjwt = "^2.10.1"
2929

3030
[tool.poetry.group.dev.dependencies]
3131
coverage = "^7.10.7"
32+
ruff = "^0.14.0"
3233

3334
[build-system]
3435
requires = ["poetry-core"]
3536
build-backend = "poetry.core.masonry.api"
37+
38+
[tool.ruff]
39+
line-length = 120
40+
target-version = "py311"
41+
42+
[tool.ruff.lint]
43+
select = ["E", "F", "B", "C4", "I", "UP"] # Common sensible defaults
44+
ignore = ["E501"] # Ignore line-too-long if needed
45+
46+
[tool.ruff.lint.isort]
47+
force-single-line = true # Optional: force single-line imports
48+
49+
[tool.ruff.format]
50+
quote-style = "double" # Or "single", depending on your code style
51+
indent-style = "space"
52+
line-ending = "lf"

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

Lines changed: 59 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,43 @@
11
# Root and base type expression checker functions
2-
import common.validator.enums.exception_messages as ExceptionMessages
32
import datetime
4-
import uuid
53
import re
6-
from common.validator.lookup.lookup_data import LookUpData
4+
import uuid
5+
from enum import Enum
6+
7+
import common.validator.enums.exception_messages as ExceptionMessages
78
from common.validator.lookup.key_data import KeyData
8-
from common.validator.record_error import RecordError, ErrorReport
9+
from common.validator.lookup.lookup_data import LookUpData
10+
from common.validator.record_error import ErrorReport
11+
from common.validator.record_error import RecordError
12+
13+
14+
class ExpressionType(Enum):
15+
DATETIME = 'DATETIME'
16+
DATE = 'DATE'
17+
UUID = 'UUID'
18+
INT = 'INT'
19+
FLOAT = 'FLOAT'
20+
REGEX = 'REGEX'
21+
EQUAL = 'EQUAL'
22+
NOTEQUAL = 'NOTEQUAL'
23+
IN = 'IN'
24+
NRANGE = 'NRANGE'
25+
INARRAY = 'INARRAY'
26+
UPPER = 'UPPER'
27+
LOWER = 'LOWER'
28+
LENGTH = 'LENGTH'
29+
STARTSWITH = 'STARTSWITH'
30+
ENDSWITH = 'ENDSWITH'
31+
EMPTY = 'EMPTY'
32+
NOTEMPTY = 'NOTEMPTY'
33+
POSITIVE = 'POSITIVE'
34+
GENDER = 'GENDER'
35+
NHSNUMBER = 'NHSNUMBER'
36+
MAXOBJECTS = 'MAXOBJECTS'
37+
POSTCODE = 'POSTCODE'
38+
ONLYIF = 'ONLYIF'
39+
LOOKUP = 'LOOKUP'
40+
KEYCHECK = 'KEYCHECK'
941

1042

1143
class ExpressionChecker:
@@ -17,7 +49,7 @@ def __init__(self, data_parser, summarise, report_unexpected_exception):
1749
self.summarise = summarise
1850
self.report_unexpected_exception = report_unexpected_exception
1951

20-
def validateExpression(self, expression_type, rule, field_name, field_value, row) -> ErrorReport:
52+
def validate_expression(self, expression_type: str, rule, field_name, field_value, row) -> ErrorReport:
2153
match expression_type:
2254
case "DATETIME":
2355
return self._validate_datetime(rule, field_name, field_value, row)
@@ -75,7 +107,7 @@ def validateExpression(self, expression_type, rule, field_name, field_value, ro
75107
return "Schema expression not found! Check your expression type : " + expression_type
76108

77109
# iso8086 date time validate
78-
def _validate_datetime(self, rule, field_name, field_value, row):
110+
def _validate_datetime(self, rule, field_name, field_value, row) -> ErrorReport:
79111
try:
80112
datetime.date.fromisoformat(field_value)
81113
# TODO - rule is not used - could be date only, date time, past, future etc
@@ -88,14 +120,14 @@ def _validate_datetime(self, rule, field_name, field_value, row):
88120
else ExceptionMessages.MESSAGES[ExceptionMessages.RECORD_CHECK_FAILED])
89121
if e.details is not None:
90122
details = e.details
91-
return RecordError(code, message, row, field_name, details, self.summarise)
123+
return ErrorReport(code, message, row, field_name, details, self.summarise)
92124
except Exception as e:
93125
if self.report_unexpected_exception:
94126
message = ExceptionMessages.MESSAGES[ExceptionMessages.UNEXPECTED_EXCEPTION] % (e.__class__.__name__, e)
95-
return RecordError(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, field_name, '', self.summarise)
127+
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, field_name, '', self.summarise)
96128

97129
# UUID validate
98-
def _validate_uuid(self, expressionRule, field_name, field_value, row):
130+
def _validate_uuid(self, expressionRule, field_name, field_value, row) -> ErrorReport:
99131
try:
100132
uuid.UUID(str(field_value))
101133
except RecordError as e:
@@ -112,7 +144,7 @@ def _validate_uuid(self, expressionRule, field_name, field_value, row):
112144

113145
# Integer Validate
114146
def _validate_integer(self, expression_rule, field_name,
115-
field_value, row, summarise=False) -> ErrorReport:
147+
field_value, row) -> ErrorReport:
116148
try:
117149
int(field_value)
118150
if expression_rule:
@@ -138,14 +170,14 @@ def _validate_integer(self, expression_rule, field_name,
138170
else ExceptionMessages.MESSAGES[ExceptionMessages.RECORD_CHECK_FAILED])
139171
if e.details is not None:
140172
details = e.details
141-
return RecordError(code, message, row, field_name, details, self.summarise)
173+
return ErrorReport(code, message, row, field_name, details, self.summarise)
142174
except Exception as e:
143175
if self.report_unexpected_exception:
144176
message = ExceptionMessages.MESSAGES[ExceptionMessages.UNEXPECTED_EXCEPTION] % (e.__class__.__name__, e)
145177
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, field_name, '', self.summarise)
146178

147179
# Float Validate
148-
def _validate_float(self, expression_rule, field_name, field_value, row, summarise):
180+
def _validate_float(self, expression_rule, field_name, field_value, row) -> ErrorReport:
149181
try:
150182
float(field_value)
151183
except RecordError as e:
@@ -154,7 +186,7 @@ def _validate_float(self, expression_rule, field_name, field_value, row, summar
154186
else ExceptionMessages.MESSAGES[ExceptionMessages.RECORD_CHECK_FAILED])
155187
if e.details is not None:
156188
details = e.details
157-
return RecordError(code, message, row, field_name, details, self.summarise)
189+
return ErrorReport(code, message, row, field_name, details, self.summarise)
158190
except Exception as e:
159191
if self.report_unexpected_exception:
160192
message = ExceptionMessages.MESSAGES[ExceptionMessages.UNEXPECTED_EXCEPTION] % (e.__class__.__name__, e)
@@ -183,7 +215,7 @@ def _validate_length(self, expression_rule, field_name, field_value, row) -> Er
183215
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, field_name, '', self.summarise)
184216

185217
# Regex Validate
186-
def _validate_regex(self, expression_rule, field_name, field_value, row, summarise) -> ErrorReport:
218+
def _validate_regex(self, expression_rule, field_name, field_value, row) -> ErrorReport:
187219
try:
188220
result = re.search(expression_rule, field_value)
189221
if not result:
@@ -197,7 +229,7 @@ def _validate_regex(self, expression_rule, field_name, field_value, row, summar
197229
)
198230
if e.details is not None:
199231
details = e.details
200-
return RecordError(code, message, row, field_name, details, self.summarise)
232+
return ErrorReport(code, message, row, field_name, details, self.summarise)
201233
except Exception as e:
202234
if self.report_unexpected_exception:
203235
message = ExceptionMessages.MESSAGES[ExceptionMessages.UNEXPECTED_EXCEPTION] % (e.__class__.__name__, e)
@@ -273,6 +305,7 @@ def _validate_n_range(self, expression_rule, field_name, field_value, row) -> E
273305
raise RecordError(ExceptionMessages.RECORD_CHECK_FAILED,
274306
"Value range check failed", "Value is not within the number range, data- "
275307
+ field_value)
308+
return None
276309
except RecordError as e:
277310
code = e.code if e.code is not None else ExceptionMessages.RECORD_CHECK_FAILED
278311
message = (
@@ -348,7 +381,7 @@ def _validate_lower(self, expression_rule, field_name, field_value, row) -> Erro
348381
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, field_name, '', self.summarise)
349382

350383
# Starts With Validate
351-
def _validate_starts_with(self, expression_rule, field_name, field_value, row, summarise) -> ErrorReport:
384+
def _validate_starts_with(self, expression_rule, field_name, field_value, row) -> ErrorReport:
352385
try:
353386
result = field_value.startswith(expression_rule)
354387
if not result:
@@ -369,7 +402,7 @@ def _validate_starts_with(self, expression_rule, field_name, field_value, row, s
369402
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, field_name, '', self.summarise)
370403

371404
# Ends With Validate
372-
def _validate_ends_with(self, expression_rule, field_name, field_value, row, summarise) -> ErrorReport:
405+
def _validate_ends_with(self, expression_rule, field_name, field_value, row) -> ErrorReport:
373406
try:
374407
result = field_value.endswith(expression_rule)
375408
if not result:
@@ -390,7 +423,7 @@ def _validate_ends_with(self, expression_rule, field_name, field_value, row, sum
390423
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, field_name, '', self.summarise)
391424

392425
# Empty Validate
393-
def _validate_empty(self, expression_rule, field_name, field_value, row, summarise) -> ErrorReport:
426+
def _validate_empty(self, expression_rule, field_name, field_value, row) -> ErrorReport:
394427
try:
395428
if field_value:
396429
raise RecordError(ExceptionMessages.RECORD_CHECK_FAILED,
@@ -409,7 +442,7 @@ def _validate_empty(self, expression_rule, field_name, field_value, row, summari
409442
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, field_name, '', self.summarise)
410443

411444
# Not Empty Validate
412-
def _validate_not_empty(self, expression_rule, field_name, field_value, row, summarise) -> ErrorReport:
445+
def _validate_not_empty(self, expression_rule, field_name, field_value, row) -> ErrorReport:
413446
try:
414447
if not field_value:
415448
raise RecordError(ExceptionMessages.RECORD_CHECK_FAILED,
@@ -428,7 +461,7 @@ def _validate_not_empty(self, expression_rule, field_name, field_value, row, sum
428461
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, field_name, '', self.summarise)
429462

430463
# Positive Validate
431-
def _validate_positive(self, expressionRule, fieldName, fieldValue, row, summarise) -> ErrorReport:
464+
def _validate_positive(self, expressionRule, fieldName, fieldValue, row) -> ErrorReport:
432465
try:
433466
value = float(fieldValue)
434467
if value < 0:
@@ -448,7 +481,7 @@ def _validate_positive(self, expressionRule, fieldName, fieldValue, row, summar
448481
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, fieldName, '', self.summarise)
449482

450483
# NHSNumber Validate
451-
def _validate_nhs_number(self, expressionRule, fieldName, fieldValue, row, summarise) -> ErrorReport:
484+
def _validate_nhs_number(self, expressionRule, fieldName, fieldValue, row) -> ErrorReport:
452485
try:
453486
regexRule = '^6[0-9]{10}$'
454487
result = re.search(regexRule, fieldValue)
@@ -469,7 +502,7 @@ def _validate_nhs_number(self, expressionRule, fieldName, fieldValue, row, summ
469502
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, fieldName, '', self.summarise)
470503

471504
# Gender Validate
472-
def _validate_gender(self, expressionRule, fieldName, fieldValue, row, summarise) -> ErrorReport:
505+
def _validate_gender(self, expressionRule, fieldName, fieldValue, row) -> ErrorReport:
473506
try:
474507
ruleList = ['0', '1', '2', '9']
475508

@@ -490,7 +523,7 @@ def _validate_gender(self, expressionRule, fieldName, fieldValue, row, summaris
490523
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, fieldName, '', self.summarise)
491524

492525
# PostCode Validate
493-
def _validate_post_code(self, expressionRule, fieldName, fieldValue, row, summarise) -> ErrorReport:
526+
def _validate_post_code(self, expressionRule, fieldName, fieldValue, row) -> ErrorReport:
494527
try:
495528
regexRule = '^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y]'
496529
'[0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$'
@@ -512,7 +545,7 @@ def _validate_post_code(self, expressionRule, fieldName, fieldValue, row, summa
512545
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, fieldName, '', self.summarise)
513546

514547
# Max Objects Validate
515-
def _validate_max_objects(self, expressionRule, fieldName, fieldValue, row, summarise) -> ErrorReport:
548+
def _validate_max_objects(self, expressionRule, fieldName, fieldValue, row) -> ErrorReport:
516549
try:
517550
value = len(fieldValue)
518551
if value > int(expressionRule):
@@ -556,7 +589,7 @@ def _validate_only_if(self, expressionRule, fieldName, fieldValue, row) -> Error
556589
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, fieldName, '', self.summarise)
557590

558591
# Check with Lookup
559-
def _validate_against_lookup(self, expressionRule, fieldName, fieldValue, row, summarise) -> ErrorReport:
592+
def _validate_against_lookup(self, expressionRule, fieldName, fieldValue, row) -> ErrorReport:
560593
try:
561594
result = self.dataLookUp.findLookUp(fieldValue)
562595
if not result:
@@ -576,7 +609,7 @@ def _validate_against_lookup(self, expressionRule, fieldName, fieldValue, row,
576609
return ErrorReport(ExceptionMessages.UNEXPECTED_EXCEPTION, message, row, fieldName, '', self.summarise)
577610

578611
# Check with Key Lookup
579-
def _validate_against_key(self, expressionRule, fieldName, fieldValue, row, summarise) -> ErrorReport:
612+
def _validate_against_key(self, expressionRule, fieldName, fieldValue, row) -> ErrorReport:
580613
try:
581614
result = self.KeyData.findKey(expressionRule, fieldValue)
582615
if not result:

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def parse_csv_line(self, csv_row, csv_header):
1515
self.csv_file_data = dict(map(lambda i, j: (i, j), keys, values))
1616

1717
# retrieve a column of data to work with
18-
def get_key_values(self, field_name):
18+
def get_key_value(self, field_name):
1919
# creating empty lists, convert to list
2020
data = [self.csv_file_data[field_name]]
2121
return data

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def parse_csv_file(self, csv_filename):
2020
# ---------------------------------------------
2121
# Scan and retrieve values
2222
# retrieve a column of data to work with
23-
def get_key_values(self, field_name):
23+
def get_key_value(self, field_name):
2424
# creating empty lists
2525
data = self.csv_file_data[field_name]
2626
return data

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def __init__(self):
1111
# File Management
1212
# used for files
1313
def parse_fhir_file(self, fhir_file_name):
14-
with open(fhir_file_name, 'r') as json_file:
14+
with open(fhir_file_name) as json_file:
1515
self.fhir_resource = json.load(json_file)
1616

1717
# used for JSON FHIR Resource data

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11

22

3-
class ErrorReport():
3+
class ErrorReport:
44
def __init__(self, code: int = None, message: str = None, row: int = None, field: str = None, details: str = None,
55
summarise: bool = False, error_level: int = None):
66
self.code = code
77
self.message = message
8-
if not summarise:
9-
self.row = row
10-
self.field = field
11-
self.details = details
8+
self.row = row
9+
self.field = field
10+
self.details = details
1211
self.summarise = summarise
1312
# these are set when the error is added to the report
1413
self.error_group = None
@@ -35,6 +34,7 @@ def to_dict(self):
3534
class RecordError(Exception):
3635

3736
def __init__(self, code=None, message=None, details=None):
37+
super().__init__(message)
3838
self.code = code
3939
self.message = message
4040
self.details = details

0 commit comments

Comments
 (0)