Stop validate function from being too complex by moving subfunctions out of it

This commit is contained in:
Pea Tyczynska
2019-01-10 17:31:32 +00:00
parent 5a1094b6fd
commit 685bff40d1

View File

@@ -8,36 +8,40 @@ from notifications_utils.recipients import (validate_phone_number, validate_emai
InvalidEmailError) InvalidEmailError)
def validate(json_to_validate, schema): format_checker = FormatChecker()
format_checker = FormatChecker()
@format_checker.checks("validate_uuid", raises=Exception)
def validate_uuid(instance): @format_checker.checks("validate_uuid", raises=Exception)
def validate_uuid(instance):
if isinstance(instance, str): if isinstance(instance, str):
UUID(instance) UUID(instance)
return True return True
@format_checker.checks('phone_number', raises=InvalidPhoneError)
def validate_schema_phone_number(instance): @format_checker.checks('phone_number', raises=InvalidPhoneError)
def validate_schema_phone_number(instance):
if isinstance(instance, str): if isinstance(instance, str):
validate_phone_number(instance, international=True) validate_phone_number(instance, international=True)
return True return True
@format_checker.checks('email_address', raises=InvalidEmailError)
def validate_schema_email_address(instance): @format_checker.checks('email_address', raises=InvalidEmailError)
def validate_schema_email_address(instance):
if isinstance(instance, str): if isinstance(instance, str):
validate_email_address(instance) validate_email_address(instance)
return True return True
@format_checker.checks('postage', raises=ValidationError)
def validate_schema_postage(instance): @format_checker.checks('postage', raises=ValidationError)
def validate_schema_postage(instance):
if isinstance(instance, str): if isinstance(instance, str):
if instance not in ["first", "second"]: if instance not in ["first", "second"]:
raise ValidationError("invalid. It must be either first or second.") raise ValidationError("invalid. It must be either first or second.")
return True return True
@format_checker.checks('datetime_within_next_day', raises=ValidationError)
def validate_schema_date_with_hour(instance): @format_checker.checks('datetime_within_next_day', raises=ValidationError)
def validate_schema_date_with_hour(instance):
if isinstance(instance, str): if isinstance(instance, str):
try: try:
dt = iso8601.parse_date(instance).replace(tzinfo=None) dt = iso8601.parse_date(instance).replace(tzinfo=None)
@@ -50,6 +54,8 @@ def validate(json_to_validate, schema):
"https://en.wikipedia.org/wiki/ISO_8601") "https://en.wikipedia.org/wiki/ISO_8601")
return True return True
def validate(json_to_validate, schema):
validator = Draft7Validator(schema, format_checker=format_checker) validator = Draft7Validator(schema, format_checker=format_checker)
errors = list(validator.iter_errors(json_to_validate)) errors = list(validator.iter_errors(json_to_validate))
if errors.__len__() > 0: if errors.__len__() > 0: