| 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 | ||||