@@ -34,19 +34,26 @@ async def validate_form_or_throw_error(
34
34
tenant_id : str ,
35
35
):
36
36
validation_errors : List [ErrorFormField ] = []
37
- if len (config_form_fields ) != len (inputs ):
38
- raise_bad_input_exception ("Are you sending too many / too few formFields?" )
37
+ if len (config_form_fields ) < len (inputs ):
38
+ raise_bad_input_exception ("Are you sending too many formFields?" )
39
39
40
40
for field in config_form_fields :
41
41
input_field : Union [None , FormField ] = find_first_occurrence_in_list (
42
42
lambda x : x .id == field .id , inputs
43
43
)
44
- if input_field is None or (input_field .value == "" and not field .optional ):
44
+ is_invalid_value = input_field is None or input_field .value == ""
45
+ if not field .optional and is_invalid_value :
45
46
validation_errors .append (ErrorFormField (field .id , "Field is not optional" ))
46
- else :
47
- error = await field .validate (input_field .value , tenant_id )
48
- if error is not None :
49
- validation_errors .append (ErrorFormField (field .id , error ))
47
+ continue
48
+
49
+ # If the field was invalid and not optional, execution won't reach here.
50
+ # so we need to skip it if the value is invalid and optional.
51
+ if is_invalid_value :
52
+ continue
53
+
54
+ error = await field .validate (input_field .value , tenant_id )
55
+ if error is not None :
56
+ validation_errors .append (ErrorFormField (field .id , error ))
50
57
51
58
if len (validation_errors ) != 0 :
52
59
# raise BadInputError(msg="Error in input formFields")
0 commit comments