Bläddra i källkod

refactor(validation): improve input validation logic (#10175)

tags/0.11.0
-LAN- 1 år sedan
förälder
incheckning
61da0f08dd
Inget konto är kopplat till bidragsgivarens mejladress
1 ändrade filer med 26 tillägg och 19 borttagningar
  1. 26
    19
      api/core/app/apps/base_app_generator.py

+ 26
- 19
api/core/app/apps/base_app_generator.py Visa fil



def _validate_input(self, *, inputs: Mapping[str, Any], var: "VariableEntity"): def _validate_input(self, *, inputs: Mapping[str, Any], var: "VariableEntity"):
user_input_value = inputs.get(var.variable) user_input_value = inputs.get(var.variable)

if not user_input_value: if not user_input_value:
if var.required: if var.required:
raise ValueError(f"{var.variable} is required in input form") raise ValueError(f"{var.variable} is required in input form")
VariableEntityType.PARAGRAPH, VariableEntityType.PARAGRAPH,
} and not isinstance(user_input_value, str): } and not isinstance(user_input_value, str):
raise ValueError(f"(type '{var.type}') {var.variable} in input form must be a string") raise ValueError(f"(type '{var.type}') {var.variable} in input form must be a string")

if var.type == VariableEntityType.NUMBER and isinstance(user_input_value, str): if var.type == VariableEntityType.NUMBER and isinstance(user_input_value, str):
# may raise ValueError if user_input_value is not a valid number # may raise ValueError if user_input_value is not a valid number
try: try:
return int(user_input_value) return int(user_input_value)
except ValueError: except ValueError:
raise ValueError(f"{var.variable} in input form must be a valid number") raise ValueError(f"{var.variable} in input form must be a valid number")
if var.type == VariableEntityType.SELECT:
options = var.options
if user_input_value not in options:
raise ValueError(f"{var.variable} in input form must be one of the following: {options}")
elif var.type in {VariableEntityType.TEXT_INPUT, VariableEntityType.PARAGRAPH}:
if var.max_length and len(user_input_value) > var.max_length:
raise ValueError(f"{var.variable} in input form must be less than {var.max_length} characters")
elif var.type == VariableEntityType.FILE:
if not isinstance(user_input_value, dict) and not isinstance(user_input_value, File):
raise ValueError(f"{var.variable} in input form must be a file")
elif var.type == VariableEntityType.FILE_LIST:
if not (
isinstance(user_input_value, list)
and (
all(isinstance(item, dict) for item in user_input_value)
or all(isinstance(item, File) for item in user_input_value)
)
):
raise ValueError(f"{var.variable} in input form must be a list of files")

match var.type:
case VariableEntityType.SELECT:
if user_input_value not in var.options:
raise ValueError(f"{var.variable} in input form must be one of the following: {var.options}")
case VariableEntityType.TEXT_INPUT | VariableEntityType.PARAGRAPH:
if var.max_length and len(user_input_value) > var.max_length:
raise ValueError(f"{var.variable} in input form must be less than {var.max_length} characters")
case VariableEntityType.FILE:
if not isinstance(user_input_value, dict) and not isinstance(user_input_value, File):
raise ValueError(f"{var.variable} in input form must be a file")
case VariableEntityType.FILE_LIST:
# if number of files exceeds the limit, raise ValueError
if not (
isinstance(user_input_value, list)
and (
all(isinstance(item, dict) for item in user_input_value)
or all(isinstance(item, File) for item in user_input_value)
)
):
raise ValueError(f"{var.variable} in input form must be a list of files")

if var.max_length and len(user_input_value) > var.max_length:
raise ValueError(f"{var.variable} in input form must be less than {var.max_length} files")


return user_input_value return user_input_value



Laddar…
Avbryt
Spara