Browse Source

🐛 Fix mypy type checking errors for Pydantic v2 optimizations

pull/15584/head
valbort 2 weeks ago
parent
commit
e893e7886b
  1. 2
      fastapi/_compat/shared.py
  2. 2
      fastapi/_compat/v2.py
  3. 10
      fastapi/dependencies/utils.py

2
fastapi/_compat/shared.py

@ -179,7 +179,7 @@ try:
with warnings.catch_warnings():
warnings.simplefilter("ignore", UserWarning)
from pydantic import v1 as _pydantic_v1
_PydanticV1BaseModel = _pydantic_v1.BaseModel
_PydanticV1BaseModel: Any = _pydantic_v1.BaseModel
except ImportError: # pragma: no cover
_PydanticV1BaseModel = None

2
fastapi/_compat/v2.py

@ -538,7 +538,7 @@ def _regenerate_error_with_loc(
break
try:
if isinstance(curr_input, (dict, list)):
curr_input = curr_input[path_item] # type: ignore[index]
curr_input = curr_input[path_item]
else:
break
except (KeyError, IndexError, TypeError):

10
fastapi/dependencies/utils.py

@ -918,9 +918,11 @@ def request_params_to_args(
# model_dump might convert inner models, which we don't want (FastAPI keeps them as objects)
values.update(validated_data.__dict__)
else:
values.update(validated_data) # type: ignore
values.update(validated_data)
except ValidationError as exc:
field_in = fields[0].field_info.in_.value
first_field_info = fields[0].field_info
assert isinstance(first_field_info, params.Param)
field_in = first_field_info.in_.value
# Map f.name to f.alias in case Pydantic returned the internal name
name_to_alias = {f.name: get_validation_alias(f) for f in fields}
@ -928,8 +930,8 @@ def request_params_to_args(
for err in exc.errors(include_url=False):
err_loc = list(err["loc"])
if err_loc and err_loc[0] in name_to_alias:
err_loc[0] = name_to_alias[err_loc[0]] # type: ignore
err["loc"] = (field_in, *err_loc) # type: ignore
err_loc[0] = name_to_alias[err_loc[0]]
err["loc"] = (field_in, *err_loc)
if err["type"] == "missing":
err["input"] = None

Loading…
Cancel
Save