Skip to content

Commit de22743

Browse files
Add support for making optional properly optional
1 parent 41da84d commit de22743

File tree

1 file changed

+14
-7
lines changed
  • supertokens_python/recipe/emailpassword/api

1 file changed

+14
-7
lines changed

supertokens_python/recipe/emailpassword/api/utils.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,26 @@ async def validate_form_or_throw_error(
3434
tenant_id: str,
3535
):
3636
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?")
3939

4040
for field in config_form_fields:
4141
input_field: Union[None, FormField] = find_first_occurrence_in_list(
4242
lambda x: x.id == field.id, inputs
4343
)
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:
4546
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))
5057

5158
if len(validation_errors) != 0:
5259
# raise BadInputError(msg="Error in input formFields")

0 commit comments

Comments
 (0)