@@ -62,19 +62,28 @@ <h1 class="title">Module <code>supertokens_python.recipe.emailpassword.api.utils
6262 tenant_id: str,
6363):
6464 validation_errors: List[ErrorFormField] = []
65- if len(config_form_fields) != len(inputs):
66- raise_bad_input_exception("Are you sending too many / too few formFields?")
65+ if len(config_form_fields) < len(inputs):
66+ raise_bad_input_exception("Are you sending too many formFields?")
6767
6868 for field in config_form_fields:
6969 input_field: Union[None, FormField] = find_first_occurrence_in_list(
7070 lambda x: x.id == field.id, inputs
7171 )
72- if input_field is None or (input_field.value == "" and not field.optional):
72+ is_invalid_value = input_field is None or input_field.value == ""
73+ if not field.optional and is_invalid_value:
7374 validation_errors.append(ErrorFormField(field.id, "Field is not optional"))
74- else:
75- error = await field.validate(input_field.value, tenant_id)
76- if error is not None:
77- validation_errors.append(ErrorFormField(field.id, error))
75+ continue
76+
77+ # If the field was invalid and not optional, execution won't reach here.
78+ # so we need to skip it if the value is invalid and optional.
79+ if is_invalid_value:
80+ continue
81+
82+ assert input_field is not None
83+
84+ error = await field.validate(input_field.value, tenant_id)
85+ if error is not None:
86+ validation_errors.append(ErrorFormField(field.id, error))
7887
7988 if len(validation_errors) != 0:
8089 # raise BadInputError(msg="Error in input formFields")
@@ -172,19 +181,28 @@ <h2 class="section-title" id="header-functions">Functions</h2>
172181 tenant_id: str,
173182):
174183 validation_errors: List[ErrorFormField] = []
175- if len(config_form_fields) != len(inputs):
176- raise_bad_input_exception("Are you sending too many / too few formFields?")
184+ if len(config_form_fields) < len(inputs):
185+ raise_bad_input_exception("Are you sending too many formFields?")
177186
178187 for field in config_form_fields:
179188 input_field: Union[None, FormField] = find_first_occurrence_in_list(
180189 lambda x: x.id == field.id, inputs
181190 )
182- if input_field is None or (input_field.value == "" and not field.optional):
191+ is_invalid_value = input_field is None or input_field.value == ""
192+ if not field.optional and is_invalid_value:
183193 validation_errors.append(ErrorFormField(field.id, "Field is not optional"))
184- else:
185- error = await field.validate(input_field.value, tenant_id)
186- if error is not None:
187- validation_errors.append(ErrorFormField(field.id, error))
194+ continue
195+
196+ # If the field was invalid and not optional, execution won't reach here.
197+ # so we need to skip it if the value is invalid and optional.
198+ if is_invalid_value:
199+ continue
200+
201+ assert input_field is not None
202+
203+ error = await field.validate(input_field.value, tenant_id)
204+ if error is not None:
205+ validation_errors.append(ErrorFormField(field.id, error))
188206
189207 if len(validation_errors) != 0:
190208 # raise BadInputError(msg="Error in input formFields")
0 commit comments