diff --git a/fastapi/_compat/v1.py b/fastapi/_compat/v1.py index fbbec552c..a8b279ae4 100644 --- a/fastapi/_compat/v1.py +++ b/fastapi/_compat/v1.py @@ -350,7 +350,13 @@ def get_model_fields(model: Type[BaseModel]) -> List[ModelField]: return list(model.__fields__.values()) # type: ignore[attr-defined] -def ignore_invalid(cls, v, values, field, **kwargs) -> Any: +def ignore_invalid( + cls: Any, + v: Dict[str, Any], + values: Dict[str, Any], + field: ModelField, + **kwargs: Any, +) -> Any: from .may_v1 import _regenerate_error_with_loc field_copy = deepcopy(field) @@ -398,6 +404,8 @@ def ignore_invalid(cls, v, values, field, **kwargs) -> Any: return v -def omit_by_default(field_info: FieldInfo) -> tuple[FieldInfo, dict]: +def omit_by_default( + field_info: FieldInfo, +) -> Tuple[FieldInfo, Dict[str, Callable[..., Any]]]: """add a wrap validator to omit invalid values by default.""" return field_info, {"ignore_invalid": Validator(ignore_invalid, pre=True)} diff --git a/fastapi/_compat/v2.py b/fastapi/_compat/v2.py index 5f2815ac7..82d248b5d 100644 --- a/fastapi/_compat/v2.py +++ b/fastapi/_compat/v2.py @@ -493,7 +493,7 @@ def get_long_model_name(model: TypeModelOrEnum) -> str: if shared.PYDANTIC_VERSION_MINOR_TUPLE >= (2, 6): # Omit by default for scalar mapping and scalar sequence mapping annotations # added in Pydantic v2.6 https://github.com/pydantic/pydantic/releases/tag/v2.6.0 - def _omit_by_default(annotation): + def _omit_by_default(annotation: Any) -> Any: origin = getattr(annotation, "__origin__", None) args = getattr(annotation, "__args__", ()) @@ -501,13 +501,15 @@ if shared.PYDANTIC_VERSION_MINOR_TUPLE >= (2, 6): new_args = tuple(_omit_by_default(arg) for arg in args) return Union[new_args] elif origin in (list, List): - return List[_omit_by_default(args[0])] + return List[_omit_by_default(args[0])] # type: ignore[misc] elif origin in (dict, Dict): - return Dict[args[0], _omit_by_default(args[1])] + return Dict[args[0], _omit_by_default(args[1])] # type: ignore[misc,valid-type] else: - return OnErrorOmit[annotation] + return OnErrorOmit[annotation] # type: ignore[misc] - def omit_by_default(field_info: FieldInfo) -> tuple[FieldInfo, dict]: + def omit_by_default( + field_info: FieldInfo, + ) -> tuple[FieldInfo, Dict[str, Callable[..., Any]]]: new_annotation = _omit_by_default(field_info.annotation) new_field_info = copy_field_info( field_info=field_info, annotation=new_annotation @@ -554,7 +556,9 @@ else: return handler(v) - def omit_by_default(field_info: FieldInfo) -> tuple[FieldInfo, dict]: + def omit_by_default( + field_info: FieldInfo, + ) -> tuple[FieldInfo, Dict[str, Callable[..., Any]]]: """add a wrap validator to omit invalid values by default.""" field_info.metadata = field_info.metadata or [] + [ WrapValidator(ignore_invalid) diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index b49998ba7..062719da9 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -506,7 +506,7 @@ def analyze_param( field_info.alias = alias # Omit by default for scalar mapping and scalar sequence mapping query fields - class_validators: dict[str, list[Any]] = {} + class_validators: Dict[str, Callable[..., Any]] = {} if isinstance(field_info, (params.Query, temp_pydantic_v1_params.Query)) and ( field_annotation_is_scalar_sequence_mapping(use_annotation_from_field_info) or field_annotation_is_scalar_mapping(use_annotation_from_field_info)