Browse Source

🐛 Fix mypy type checking errors for Pydantic v2 optimizations

pull/15584/head
valbort 3 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(): with warnings.catch_warnings():
warnings.simplefilter("ignore", UserWarning) warnings.simplefilter("ignore", UserWarning)
from pydantic import v1 as _pydantic_v1 from pydantic import v1 as _pydantic_v1
_PydanticV1BaseModel = _pydantic_v1.BaseModel _PydanticV1BaseModel: Any = _pydantic_v1.BaseModel
except ImportError: # pragma: no cover except ImportError: # pragma: no cover
_PydanticV1BaseModel = None _PydanticV1BaseModel = None

2
fastapi/_compat/v2.py

@ -538,7 +538,7 @@ def _regenerate_error_with_loc(
break break
try: try:
if isinstance(curr_input, (dict, list)): if isinstance(curr_input, (dict, list)):
curr_input = curr_input[path_item] # type: ignore[index] curr_input = curr_input[path_item]
else: else:
break break
except (KeyError, IndexError, TypeError): 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) # model_dump might convert inner models, which we don't want (FastAPI keeps them as objects)
values.update(validated_data.__dict__) values.update(validated_data.__dict__)
else: else:
values.update(validated_data) # type: ignore values.update(validated_data)
except ValidationError as exc: 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 # 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} 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): for err in exc.errors(include_url=False):
err_loc = list(err["loc"]) err_loc = list(err["loc"])
if err_loc and err_loc[0] in name_to_alias: if err_loc and err_loc[0] in name_to_alias:
err_loc[0] = name_to_alias[err_loc[0]] # type: ignore err_loc[0] = name_to_alias[err_loc[0]]
err["loc"] = (field_in, *err_loc) # type: ignore err["loc"] = (field_in, *err_loc)
if err["type"] == "missing": if err["type"] == "missing":
err["input"] = None err["input"] = None

Loading…
Cancel
Save