diff --git a/tests/test_aliases/__init__.py b/tests/test_aliases/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/test_aliases/test_file_field_aliases.py b/tests/test_aliases/test_file_field_aliases.py index 5a3265e03..f08cd0a55 100644 --- a/tests/test_aliases/test_file_field_aliases.py +++ b/tests/test_aliases/test_file_field_aliases.py @@ -1,16 +1,20 @@ -from typing import Optional +from typing import List, Optional import pytest -from dirty_equals import IsOneOf from fastapi import FastAPI, File from fastapi.testclient import TestClient +from ..utils import needs_pydanticv2 + +pytestmark = needs_pydanticv2 + + app = FastAPI() # ===================================================================================== # File(alias=...) # Current situation: Works, but schema is wrong -# Optional[list[bytes]] fails due to another issue (likely not related to aliases) +# Optional[List[bytes]] fails due to another issue (likely not related to aliases) # ------------------------------ # required field @@ -26,10 +30,7 @@ def test_required_field_alias_by_name(): resp = client.post("/required-field-alias", files={"file": b"content"}) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "file_alias" in detail[0]["loc"] @@ -100,7 +101,7 @@ def test_optional_field_alias_schema(): @app.post("/list-field-alias", operation_id="list_field_alias") -async def list_field_alias(files: list[bytes] = File(alias="files_alias")): +async def list_field_alias(files: List[bytes] = File(alias="files_alias")): return {"file_sizes": [len(file) for file in files]} @@ -111,10 +112,7 @@ def test_list_field_alias_by_name(): ) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "files_alias" in detail[0]["loc"] @@ -151,7 +149,7 @@ def test_list_field_alias_schema(): @app.post("/optional-list-field-alias", operation_id="optional_list_field_alias") async def optional_list_field_alias( - files: Optional[list[bytes]] = File(None, alias="files_alias"), + files: Optional[List[bytes]] = File(None, alias="files_alias"), ): if files is None: return {"file_sizes": None} @@ -169,7 +167,7 @@ def test_optional_list_field_alias_by_name(): @pytest.mark.xfail( - reason="Optional[list[bytes]] File type causes TypeError in FastAPI", + reason="Optional[List[bytes]] File type causes TypeError in FastAPI", raises=TypeError, strict=False, ) @@ -207,7 +205,7 @@ def test_optional_list_field_alias_schema(): # ===================================================================================== # File(validation_alias=...) # Current situation: schema is correct, but doesn't work (parameter name is used) -# Optional[list[bytes]] fails due to another issue (likely not related to aliases) +# Optional[List[bytes]] fails due to another issue (likely not related to aliases) # ------------------------------ @@ -232,10 +230,7 @@ def test_required_field_validation_alias_by_name(): # AssertionError: assert 200 == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "file_val_alias" in detail[0]["loc"] @@ -320,7 +315,7 @@ def test_optional_field_validation_alias_schema(): @app.post("/list-field-validation-alias", operation_id="list_field_validation_alias") async def list_field_validation_alias( - files: list[bytes] = File(validation_alias="files_val_alias"), + files: List[bytes] = File(validation_alias="files_val_alias"), ): return {"file_sizes": [len(file) for file in files]} @@ -337,10 +332,7 @@ def test_list_field_validation_alias_by_name(): # AssertionError: assert 200 == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "files_val_alias" in detail[0]["loc"] @@ -379,7 +371,7 @@ def test_list_field_validation_alias_schema(): operation_id="optional_list_field_validation_alias", ) async def optional_list_field_validation_alias( - files: Optional[list[bytes]] = File(None, validation_alias="files_val_alias"), + files: Optional[List[bytes]] = File(None, validation_alias="files_val_alias"), ): if files is None: return {"file_sizes": None} @@ -387,7 +379,7 @@ async def optional_list_field_validation_alias( @pytest.mark.xfail( - reason="Optional[list[bytes]] File type causes TypeError in FastAPI", + reason="Optional[List[bytes]] File type causes TypeError in FastAPI", raises=TypeError, strict=False, ) @@ -436,7 +428,7 @@ def test_optional_list_field_validation_alias_schema(): # ===================================================================================== # File(alias=..., validation_alias=...) # Current situation: Schema is correct (validation_alias), but doesn't work (alias is used) -# Optional[list[bytes]] fails due to another issue (likely not related to aliases) +# Optional[List[bytes]] fails due to another issue (likely not related to aliases) # ------------------------------ # required field @@ -460,10 +452,7 @@ def test_required_field_alias_and_validation_alias_by_name(): ) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "file_val_alias" in detail[0]["loc"] # Currently fails due to issue with aliases: # AssertionError: assert 'file_val_alias' in ['body', 'file_alias'] @@ -480,10 +469,7 @@ def test_required_field_alias_and_validation_alias_by_alias(): # AssertionError: assert 200 == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "file_val_alias" in detail[0]["loc"] @@ -589,7 +575,7 @@ def test_optional_field_alias_and_validation_alias_schema(): operation_id="list_field_alias_and_validation_alias", ) async def list_field_alias_and_validation_alias( - files: list[bytes] = File(alias="files_alias", validation_alias="files_val_alias"), + files: List[bytes] = File(alias="files_alias", validation_alias="files_val_alias"), ): return {"file_sizes": [len(file) for file in files]} @@ -603,10 +589,7 @@ def test_list_field_alias_and_validation_alias_by_name(): ) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "files_val_alias" in detail[0]["loc"] # Currently fails due to issue with aliases: # AssertionError: assert 'files_val_alias' in ['body', 'files_alias'] @@ -624,10 +607,7 @@ def test_list_field_alias_and_validation_alias_by_alias(): # AssertionError: assert 200 == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "files_val_alias" in detail[0]["loc"] @@ -668,7 +648,7 @@ def test_list_field_alias_and_validation_alias_schema(): operation_id="optional_list_field_alias_and_validation_alias", ) async def optional_list_field_alias_and_validation_alias( - files: Optional[list[bytes]] = File( + files: Optional[List[bytes]] = File( None, alias="files_alias", validation_alias="files_val_alias" ), ): @@ -688,7 +668,7 @@ def test_optional_list_field_alias_and_validation_alias_by_name(): @pytest.mark.xfail( - reason="Optional[list[bytes]] File type causes TypeError in FastAPI", + reason="Optional[List[bytes]] File type causes TypeError in FastAPI", raises=TypeError, strict=False, ) @@ -754,10 +734,7 @@ def test_workaround_by_name(): resp = client.post("/workaround", files={"file": b"content"}) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "file_alias" in detail[0]["loc"] diff --git a/tests/test_aliases/test_form_field_aliases.py b/tests/test_aliases/test_form_field_aliases.py index 39920d7f6..860d398ac 100644 --- a/tests/test_aliases/test_form_field_aliases.py +++ b/tests/test_aliases/test_form_field_aliases.py @@ -1,10 +1,14 @@ -from typing import Optional +from typing import List, Optional import pytest -from dirty_equals import IsOneOf from fastapi import FastAPI, Form from fastapi.testclient import TestClient +from ..utils import needs_pydanticv2 + +pytestmark = needs_pydanticv2 + + app = FastAPI() # ===================================================================================== @@ -25,10 +29,7 @@ def test_required_field_alias_by_name(): resp = client.post("/required-field-alias", data={"param": "123"}) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_alias" in detail[0]["loc"] @@ -97,7 +98,7 @@ def test_optional_field_alias_schema(): @app.post("/list-field-alias", operation_id="list_field_alias") -async def list_field_alias(param: list[str] = Form(alias="param_alias")): +async def list_field_alias(param: List[str] = Form(alias="param_alias")): return {"param": param} @@ -106,10 +107,7 @@ def test_list_field_alias_by_name(): resp = client.post("/list-field-alias", data={"param": ["123", "456"]}) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_alias" in detail[0]["loc"] @@ -143,7 +141,7 @@ def test_list_field_alias_schema(): @app.post("/optional-list-field-alias", operation_id="optional_list_field_alias") async def optional_list_field_alias( - param: Optional[list[str]] = Form(None, alias="param_alias"), + param: Optional[List[str]] = Form(None, alias="param_alias"), ): return {"param": param} @@ -207,10 +205,7 @@ def test_required_field_validation_alias_by_name(): # AssertionError: assert 200 == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] @@ -290,7 +285,7 @@ def test_optional_field_validation_alias_schema(): @app.post("/list-field-validation-alias", operation_id="list_field_validation_alias") async def list_field_validation_alias( - param: list[str] = Form(validation_alias="param_val_alias"), + param: List[str] = Form(validation_alias="param_val_alias"), ): return {"param": param} @@ -304,10 +299,7 @@ def test_list_field_validation_alias_by_name(): # AssertionError: assert 200 == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] @@ -345,7 +337,7 @@ def test_list_field_validation_alias_schema(): operation_id="optional_list_field_validation_alias", ) async def optional_list_field_validation_alias( - param: Optional[list[str]] = Form(None, validation_alias="param_val_alias"), + param: Optional[List[str]] = Form(None, validation_alias="param_val_alias"), ): return {"param": param} @@ -414,10 +406,7 @@ def test_required_field_alias_and_validation_alias_by_name(): ) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] # Currently fails due to issue with aliases: # AssertionError: assert 'param_val_alias' in ['body', 'param_alias'] @@ -434,10 +423,7 @@ def test_required_field_alias_and_validation_alias_by_alias(): # AssertionError: assert 200 == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] @@ -535,7 +521,7 @@ def test_optional_field_alias_and_validation_alias_schema(): operation_id="list_field_alias_and_validation_alias", ) async def list_field_alias_and_validation_alias( - param: list[str] = Form(alias="param_alias", validation_alias="param_val_alias"), + param: List[str] = Form(alias="param_alias", validation_alias="param_val_alias"), ): return {"param": param} @@ -548,10 +534,7 @@ def test_list_field_alias_and_validation_alias_by_name(): ) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] # Currently fails due to issue with aliases: # AssertionError: assert 'param_val_alias' in ['body', 'param_alias'] @@ -568,10 +551,7 @@ def test_list_field_alias_and_validation_alias_by_alias(): # AssertionError: assert 200 == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] @@ -612,7 +592,7 @@ def test_list_field_alias_and_validation_alias_schema(): operation_id="optional_list_field_alias_and_validation_alias", ) async def optional_list_field_alias_and_validation_alias( - param: Optional[list[str]] = Form( + param: Optional[List[str]] = Form( None, alias="param_alias", validation_alias="param_val_alias" ), ): @@ -686,10 +666,7 @@ def test_workaround_by_name(): resp = client.post("/workaround", data={"param": "123"}) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_alias" in detail[0]["loc"] diff --git a/tests/test_aliases/test_form_model_aliases.py b/tests/test_aliases/test_form_model_aliases.py index 48b1d0da4..583b5f01d 100644 --- a/tests/test_aliases/test_form_model_aliases.py +++ b/tests/test_aliases/test_form_model_aliases.py @@ -1,11 +1,14 @@ -from typing import Annotated, Optional +from typing import List, Optional import pytest -from dirty_equals import IsOneOf from fastapi import FastAPI, Form from fastapi.testclient import TestClient from pydantic import BaseModel, Field +from ..utils import needs_pydanticv2 + +pytestmark = needs_pydanticv2 + app = FastAPI() # ===================================================================================== @@ -21,7 +24,7 @@ class RequiredFieldAliasModel(BaseModel): @app.post("/required-field-alias-model") -async def required_field_alias_model(data: Annotated[RequiredFieldAliasModel, Form()]): +async def required_field_alias_model(data: RequiredFieldAliasModel = Form(...)): return {"param": data.param} @@ -30,10 +33,7 @@ def test_required_field_alias_model_by_name(): resp = client.post("/required-field-alias-model", data={"param": "123"}) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_alias" in detail[0]["loc"] @@ -61,7 +61,7 @@ class OptionalFieldAliasModel(BaseModel): @app.post("/optional-field-alias-model") -async def optional_field_alias_model(data: Annotated[OptionalFieldAliasModel, Form()]): +async def optional_field_alias_model(data: OptionalFieldAliasModel = Form(...)): return {"param": data.param} @@ -95,11 +95,11 @@ def test_optional_field_alias_model_schema(): class ListFieldAliasModel(BaseModel): - param: list[str] = Field(alias="param_alias") + param: List[str] = Field(alias="param_alias") @app.post("/list-field-alias-model") -async def list_field_alias_model(data: Annotated[ListFieldAliasModel, Form()]): +async def list_field_alias_model(data: ListFieldAliasModel = Form(...)): return {"param": data.param} @@ -108,10 +108,7 @@ def test_list_field_alias_model_by_name(): resp = client.post("/list-field-alias-model", data={"param": ["123", "456"]}) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_alias" in detail[0]["loc"] @@ -139,12 +136,12 @@ def test_list_field_alias_model_schema(): class OptionalListFieldAliasModel(BaseModel): - param: Optional[list[str]] = Field(None, alias="param_alias") + param: Optional[List[str]] = Field(None, alias="param_alias") @app.post("/optional-list-field-alias-model") async def optional_list_field_alias_model( - data: Annotated[OptionalListFieldAliasModel, Form()], + data: OptionalListFieldAliasModel = Form(...), ): return {"param": data.param} @@ -170,8 +167,12 @@ def test_optional_list_field_alias_model_by_alias(): def test_optional_list_field_alias_model_schema(): openapi = app.openapi() body_schema = openapi["components"]["schemas"]["OptionalListFieldAliasModel"] - assert len(body_schema["properties"]) == 1 - assert "param_alias" in body_schema["properties"] + assert body_schema["properties"] == { + "param_alias": { + "anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], + "title": "Param Alias", + } + } # ===================================================================================== @@ -192,7 +193,7 @@ class RequiredFieldValidationAliasModel(BaseModel): operation_id="required_field_validation_alias_model", ) async def required_field_validation_alias_model( - data: Annotated[RequiredFieldValidationAliasModel, Form()], + data: RequiredFieldValidationAliasModel = Form(...), ): return {"param": data.param} @@ -202,10 +203,7 @@ def test_required_field_validation_alias_model_by_name(): resp = client.post("/required-field-validation-alias-model", data={"param": "123"}) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] @@ -239,7 +237,7 @@ class OptionalFieldValidationAliasModel(BaseModel): operation_id="optional_field_validation_alias_model", ) async def optional_field_validation_alias_model( - data: Annotated[OptionalFieldValidationAliasModel, Form()], + data: OptionalFieldValidationAliasModel = Form(...), ): return {"param": data.param} @@ -276,7 +274,7 @@ def test_optional_field_validation_alias_model_schema(): class ListFieldValidationAliasModel(BaseModel): - param: list[str] = Field(validation_alias="param_val_alias") + param: List[str] = Field(validation_alias="param_val_alias") @app.post( @@ -284,7 +282,7 @@ class ListFieldValidationAliasModel(BaseModel): operation_id="list_field_validation_alias_model", ) async def list_field_validation_alias_model( - data: Annotated[ListFieldValidationAliasModel, Form()], + data: ListFieldValidationAliasModel = Form(...), ): return {"param": data.param} @@ -296,10 +294,7 @@ def test_list_field_validation_alias_model_by_name(): ) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] @@ -334,7 +329,7 @@ def test_list_field_validation_alias_model_schema(): class OptionalListFieldValidationAliasModel(BaseModel): - param: Optional[list[str]] = Field(None, validation_alias="param_val_alias") + param: Optional[List[str]] = Field(None, validation_alias="param_val_alias") @app.post( @@ -342,7 +337,7 @@ class OptionalListFieldValidationAliasModel(BaseModel): operation_id="optional_list_field_validation_alias_model", ) async def optional_list_field_validation_alias_model( - data: Annotated[OptionalListFieldValidationAliasModel, Form()], + data: OptionalListFieldValidationAliasModel = Form(...), ): return {"param": data.param} @@ -401,7 +396,7 @@ class RequiredFieldAliasAndValidationAliasModel(BaseModel): operation_id="required_field_alias_and_validation_alias_model", ) async def required_field_alias_and_validation_alias_model( - data: Annotated[RequiredFieldAliasAndValidationAliasModel, Form()], + data: RequiredFieldAliasAndValidationAliasModel = Form(...), ): return {"param": data.param} @@ -413,10 +408,7 @@ def test_required_field_alias_and_validation_alias_model_by_name(): ) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] @@ -427,10 +419,7 @@ def test_required_field_alias_and_validation_alias_model_by_alias(): ) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] @@ -469,7 +458,7 @@ class OptionalFieldAliasAndValidationAliasModel(BaseModel): operation_id="optional_field_alias_and_validation_alias_model", ) async def optional_field_alias_and_validation_alias_model( - data: Annotated[OptionalFieldAliasAndValidationAliasModel, Form()], + data: OptionalFieldAliasAndValidationAliasModel = Form(...), ): return {"param": data.param} @@ -520,7 +509,7 @@ def test_optional_field_alias_and_validation_alias_model_schema(): class ListFieldAliasAndValidationAliasModel(BaseModel): - param: list[str] = Field(alias="param_alias", validation_alias="param_val_alias") + param: List[str] = Field(alias="param_alias", validation_alias="param_val_alias") @app.post( @@ -528,7 +517,7 @@ class ListFieldAliasAndValidationAliasModel(BaseModel): operation_id="list_field_alias_and_validation_alias_model", ) async def list_field_alias_and_validation_alias_model( - data: Annotated[ListFieldAliasAndValidationAliasModel, Form()], + data: ListFieldAliasAndValidationAliasModel = Form(...), ): return {"param": data.param} @@ -540,10 +529,7 @@ def test_list_field_alias_and_validation_alias_model_by_name(): ) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] @@ -555,10 +541,7 @@ def test_list_field_alias_and_validation_alias_model_by_alias(): ) assert resp.status_code == 422 detail = resp.json()["detail"] - assert detail[0]["msg"] == IsOneOf( - "Field required", - "field required", # TODO: remove when deprecating Pydantic v1 - ) + assert detail[0]["msg"] == "Field required" assert "param_val_alias" in detail[0]["loc"] @@ -596,7 +579,7 @@ def test_list_field_alias_and_validation_alias_model_schema(): class OptionalListFieldAliasAndValidationAliasModel(BaseModel): - param: Optional[list[str]] = Field( + param: Optional[List[str]] = Field( None, alias="param_alias", validation_alias="param_val_alias" ) @@ -606,7 +589,7 @@ class OptionalListFieldAliasAndValidationAliasModel(BaseModel): operation_id="optional_list_field_alias_and_validation_alias_model", ) async def optional_list_field_alias_and_validation_alias_model( - data: Annotated[OptionalListFieldAliasAndValidationAliasModel, Form()], + data: OptionalListFieldAliasAndValidationAliasModel = Form(...), ): return {"param": data.param}