Skip to content

Commit

Permalink
- Updated validator logic
Browse files Browse the repository at this point in the history
- added cat3 t3 validators
- added new validators
  • Loading branch information
elipe17 committed Jun 30, 2023
1 parent a8a6468 commit 043f418
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 10 deletions.
1 change: 0 additions & 1 deletion tdrs-backend/tdpservice/parsers/schema_defs/tanf/t1.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
validators.hasLength(156),
],
postparsing_validators=[
cat3_validate_t1,
validators.if_then_validator(
condition_field='DISPOSITION', condition_function=validators.matches(2),
result_field='RPT_MONTH_YEAR', result_function=validators.notEmpty(),
Expand Down
1 change: 0 additions & 1 deletion tdrs-backend/tdpservice/parsers/schema_defs/tanf/t2.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
validators.hasLength(156),
],
postparsing_validators=[
cat3_validate_t2,
validators.if_then_validator(
condition_field='DATE_OF_BIRTH', condition_function=validators.matches('99999999'),
result_field='FAMILY_AFFILIATION', result_function=validators.isInLimits(2, 5),
Expand Down
103 changes: 100 additions & 3 deletions tdrs-backend/tdpservice/parsers/schema_defs/tanf/t3.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
"""Schema for HEADER row of all submission types."""


from ..cat3_validators import cat3_validate_t3
from ...util import MultiRecordRowSchema, RowSchema, Field
from ... import validators
from tdpservice.search_indexes.models.tanf import TANF_T3
Expand All @@ -12,7 +11,56 @@
preparsing_validators=[
validators.notEmpty(start=19, end=60),
],
postparsing_validators=[cat3_validate_t3,],
postparsing_validators=[
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1),
result_field='SSN', result_function=validators.notOneOf(("999999999", "000000000")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_HISPANIC', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_AMER_INDIAN', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_ASIAN', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_BLACK', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_HAWAIIAN', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_WHITE', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RELATIONSHIP_HOH', result_function=validators.isInLimits(4, 9),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='PARENT_MINOR_CHILD', result_function=validators.oneOf(("1", "2", "3")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1),
result_field='EDUCATION_LEVEL', result_function=validators.notMatches("99"),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1),
result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(2),
result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf(("1", "2", "9")),
),
],
fields=[
Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2,
required=True, validators=[]),
Expand Down Expand Up @@ -65,7 +113,56 @@
preparsing_validators=[
validators.notEmpty(start=60, end=101),
],
postparsing_validators=[],
postparsing_validators=[
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1),
result_field='SSN', result_function=validators.notOneOf(("999999999", "000000000")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_HISPANIC', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_AMER_INDIAN', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_ASIAN', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_BLACK', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_HAWAIIAN', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RACE_WHITE', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='RELATIONSHIP_HOH', result_function=validators.isInLimits(4, 9),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)),
result_field='PARENT_MINOR_CHILD', result_function=validators.oneOf(("1", "2", "3")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1),
result_field='EDUCATION_LEVEL', result_function=validators.notMatches("99"),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1),
result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf(("1", "2")),
),
validators.if_then_validator(
condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(2),
result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf(("1", "2", "9")),
),
],
fields=[
Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2,
required=True, validators=[]),
Expand Down
26 changes: 21 additions & 5 deletions tdrs-backend/tdpservice/parsers/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,14 @@ def if_then_validator(condition_field, condition_function,
:param args: list of two strings representing the keys of the values to be validated
"""
def if_then_validator_func(value):
value1 = value[condition_field]
value2 = value[result_field]
value1 = value[condition_field] if type(value) is dict else getattr(value, condition_field)
value2 = value[result_field] if type(result_field) is dict else getattr(value, result_field)

validator1_result = condition_function(value1)
validator2_result = result_function(value2)
return (True, None) if not validator1_result[0] else (validator2_result[0], 'if ' + validator1_result[1] +
' then ' + validator2_result[1])
return (True, None) if validator1_result[0] else (validator1_result[0] & validator2_result[0],
'if ' + validator1_result[1] +
' then ' + validator2_result[1])

return lambda value: if_then_validator_func(value)

Expand All @@ -48,15 +49,30 @@ def matches(option):
lambda value: f'{value} does not match {option}.'
)

def notMatches(option):
"""Validate that value is not equal to option."""
return make_validator(
lambda value: value != option,
lambda value: f'{value} matches {option}.'
)


def oneOf(options=[]):
"""Validate that value exists in the provided options array."""
"""Validate that value does not exist in the provided options array."""
return make_validator(
lambda value: value in options,
lambda value: f'{value} is not in {options}.'
)


def notOneOf(options=[]):
"""Validate that value exists in the provided options array."""
return make_validator(
lambda value: value not in options,
lambda value: f'{value} is in {options}.'
)


def between(min, max):
"""Validate value, when casted to int, is greater than min and less than max."""
return make_validator(
Expand Down

0 comments on commit 043f418

Please sign in to comment.