🐛 Fix parsing values in FormData for Union/Optional in list, set, tuple and more for PydanticV2.

This commit is contained in:
dotX12 2023-07-23 01:58:33 +03:00
parent f7e3559bd5
commit 3d90df0718
1 changed files with 15 additions and 1 deletions

View File

@ -223,7 +223,21 @@ if PYDANTIC_V2:
) and not isinstance(field.field_info, params.Body)
def is_sequence_field(field: ModelField) -> bool:
return field_annotation_is_sequence(field.field_info.annotation)
return field_annotation_is_sequence(
field.field_info.annotation
) or field_annotation_is_optional_sequence(field.field_info.annotation)
def field_annotation_is_optional_sequence(
annotation: Union[Type[Any], None]
) -> bool:
origin = get_origin(annotation)
if origin is Union:
args = get_args(annotation)
first_argument = args[0]
if hasattr(first_argument, "__origin__"):
if first_argument.__origin__ in sequence_types:
return True
return False
def is_scalar_sequence_field(field: ModelField) -> bool:
return field_annotation_is_scalar_sequence(field.field_info.annotation)