From 297d2594f8363e16ff0737042e37009c452841c9 Mon Sep 17 00:00:00 2001 From: harol Date: Sun, 24 Sep 2023 22:12:24 -0500 Subject: [PATCH 1/8] Fix not consider alias in Form --- .gitignore | 1 + fastapi/_compat.py | 2 +- tests/test_alias_in_form.py | 28 ++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tests/test_alias_in_form.py diff --git a/.gitignore b/.gitignore index 9be494cec..e5a2765fc 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ archive.zip # macOS .DS_Store +.python-version diff --git a/fastapi/_compat.py b/fastapi/_compat.py index eb55b08f2..25225baef 100644 --- a/fastapi/_compat.py +++ b/fastapi/_compat.py @@ -262,7 +262,7 @@ if PYDANTIC_V2: def create_body_model( *, fields: Sequence[ModelField], model_name: str ) -> Type[BaseModel]: - field_params = {f.name: (f.field_info.annotation, f.field_info) for f in fields} + field_params = {f.field_info.alias: (f.field_info.annotation, f.field_info) for f in fields} BodyModel: Type[BaseModel] = create_model(model_name, **field_params) # type: ignore[call-overload] return BodyModel diff --git a/tests/test_alias_in_form.py b/tests/test_alias_in_form.py new file mode 100644 index 000000000..3459b90bc --- /dev/null +++ b/tests/test_alias_in_form.py @@ -0,0 +1,28 @@ +from typing import Annotated + +from fastapi import FastAPI, Form +from starlette.testclient import TestClient + + +app:FastAPI = FastAPI() + +@app.post("/testing_alias") +async def check_alias(id_test: Annotated[int, Form(alias="otherId")]): + return {"other_id":id_test} + +@app.patch("/testing") +async def check_without_alias(id_test:Annotated[int, Form()]): + return {"id_test":id_test} + + +client = TestClient(app) + +def test_without_alias(): + response = client.patch("/testing", data={"id_test":1}) + assert response.status_code == 200 + assert response.json() == {"id_test":1} + +def test_get_alias(): + response = client.post("/testing_alias", data={"otherId":"1"}) + assert response.status_code == 200 + assert response.json() == {"other_id":1} \ No newline at end of file From 0c507ec1bf1a4bd4165ba9583c68800354dff85f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 03:19:39 +0000 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=8E=A8=20[pre-commit.ci]=20Auto=20for?= =?UTF-8?q?mat=20from=20pre-commit.com=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/_compat.py | 4 +++- tests/test_alias_in_form.py | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/fastapi/_compat.py b/fastapi/_compat.py index 25225baef..dc5a08671 100644 --- a/fastapi/_compat.py +++ b/fastapi/_compat.py @@ -262,7 +262,9 @@ if PYDANTIC_V2: def create_body_model( *, fields: Sequence[ModelField], model_name: str ) -> Type[BaseModel]: - field_params = {f.field_info.alias: (f.field_info.annotation, f.field_info) for f in fields} + field_params = { + f.field_info.alias: (f.field_info.annotation, f.field_info) for f in fields + } BodyModel: Type[BaseModel] = create_model(model_name, **field_params) # type: ignore[call-overload] return BodyModel diff --git a/tests/test_alias_in_form.py b/tests/test_alias_in_form.py index 3459b90bc..4315a7bcc 100644 --- a/tests/test_alias_in_form.py +++ b/tests/test_alias_in_form.py @@ -3,26 +3,29 @@ from typing import Annotated from fastapi import FastAPI, Form from starlette.testclient import TestClient +app: FastAPI = FastAPI() -app:FastAPI = FastAPI() @app.post("/testing_alias") async def check_alias(id_test: Annotated[int, Form(alias="otherId")]): - return {"other_id":id_test} + return {"other_id": id_test} + @app.patch("/testing") -async def check_without_alias(id_test:Annotated[int, Form()]): - return {"id_test":id_test} +async def check_without_alias(id_test: Annotated[int, Form()]): + return {"id_test": id_test} client = TestClient(app) + def test_without_alias(): - response = client.patch("/testing", data={"id_test":1}) + response = client.patch("/testing", data={"id_test": 1}) assert response.status_code == 200 - assert response.json() == {"id_test":1} + assert response.json() == {"id_test": 1} + def test_get_alias(): - response = client.post("/testing_alias", data={"otherId":"1"}) + response = client.post("/testing_alias", data={"otherId": "1"}) assert response.status_code == 200 - assert response.json() == {"other_id":1} \ No newline at end of file + assert response.json() == {"other_id": 1} From 8c1eb0f984cbfcf86ec4f6eccfd2f5bc02f088ce Mon Sep 17 00:00:00 2001 From: harol Date: Sun, 24 Sep 2023 22:37:47 -0500 Subject: [PATCH 3/8] consider alias in form --- fastapi/_compat.py | 2 +- tests/test_alias_in_form.py | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/fastapi/_compat.py b/fastapi/_compat.py index 25225baef..d96cb4c28 100644 --- a/fastapi/_compat.py +++ b/fastapi/_compat.py @@ -262,7 +262,7 @@ if PYDANTIC_V2: def create_body_model( *, fields: Sequence[ModelField], model_name: str ) -> Type[BaseModel]: - field_params = {f.field_info.alias: (f.field_info.annotation, f.field_info) for f in fields} + field_params = {f"{f.field_info.alias}": (f.field_info.annotation, f.field_info) for f in fields} BodyModel: Type[BaseModel] = create_model(model_name, **field_params) # type: ignore[call-overload] return BodyModel diff --git a/tests/test_alias_in_form.py b/tests/test_alias_in_form.py index 3459b90bc..103c8180c 100644 --- a/tests/test_alias_in_form.py +++ b/tests/test_alias_in_form.py @@ -1,5 +1,3 @@ -from typing import Annotated - from fastapi import FastAPI, Form from starlette.testclient import TestClient @@ -7,11 +5,11 @@ from starlette.testclient import TestClient app:FastAPI = FastAPI() @app.post("/testing_alias") -async def check_alias(id_test: Annotated[int, Form(alias="otherId")]): +async def check_alias(id_test: int = Form(alias="otherId")): return {"other_id":id_test} @app.patch("/testing") -async def check_without_alias(id_test:Annotated[int, Form()]): +async def check_without_alias(id_test:int = Form()): return {"id_test":id_test} From 0dacaa63be7fe5b42f03df37cf077718649a3312 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 03:50:29 +0000 Subject: [PATCH 4/8] =?UTF-8?q?=F0=9F=8E=A8=20[pre-commit.ci]=20Auto=20for?= =?UTF-8?q?mat=20from=20pre-commit.com=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/_compat.py | 5 ++++- tests/test_alias_in_form.py | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/fastapi/_compat.py b/fastapi/_compat.py index d96cb4c28..3a9a6fb79 100644 --- a/fastapi/_compat.py +++ b/fastapi/_compat.py @@ -262,7 +262,10 @@ if PYDANTIC_V2: def create_body_model( *, fields: Sequence[ModelField], model_name: str ) -> Type[BaseModel]: - field_params = {f"{f.field_info.alias}": (f.field_info.annotation, f.field_info) for f in fields} + field_params = { + f"{f.field_info.alias}": (f.field_info.annotation, f.field_info) + for f in fields + } BodyModel: Type[BaseModel] = create_model(model_name, **field_params) # type: ignore[call-overload] return BodyModel diff --git a/tests/test_alias_in_form.py b/tests/test_alias_in_form.py index daa657cc4..e8a11b6c7 100644 --- a/tests/test_alias_in_form.py +++ b/tests/test_alias_in_form.py @@ -6,14 +6,17 @@ app: FastAPI = FastAPI() @app.post("/testing_alias") async def check_alias(id_test: int = Form(alias="otherId")): - return {"other_id":id_test} + return {"other_id": id_test} + @app.patch("/testing") -async def check_without_alias(id_test:int = Form()): - return {"id_test":id_test} +async def check_without_alias(id_test: int = Form()): + return {"id_test": id_test} + client = TestClient(app) + def test_without_alias(): response = client.patch("/testing", data={"id_test": 1}) assert response.status_code == 200 @@ -23,4 +26,4 @@ def test_without_alias(): def test_get_alias(): response = client.post("/testing_alias", data={"otherId": "1"}) assert response.status_code == 200 - assert response.json() == {"other_id": 1} \ No newline at end of file + assert response.json() == {"other_id": 1} From e3125fd1ed8eaaaca845218c6ec615f7589e7ce4 Mon Sep 17 00:00:00 2001 From: Harol Alvarado Date: Wed, 6 Mar 2024 22:46:07 -0500 Subject: [PATCH 5/8] add validation schema openapi in testing and support to validation_alias in Form --- fastapi/_compat.py | 4 +- ...test_alias_and_validation_alias_in_form.py | 47 +++++++++++++++++++ tests/test_alias_in_form.py | 29 ------------ 3 files changed, 49 insertions(+), 31 deletions(-) create mode 100644 tests/test_alias_and_validation_alias_in_form.py delete mode 100644 tests/test_alias_in_form.py diff --git a/fastapi/_compat.py b/fastapi/_compat.py index d3353a53a..1d13a0c80 100644 --- a/fastapi/_compat.py +++ b/fastapi/_compat.py @@ -88,7 +88,7 @@ if PYDANTIC_V2: @property def alias(self) -> str: - a = self.field_info.alias + a = self.field_info.validation_alias or self.field_info.alias return a if a is not None else self.name @property @@ -274,7 +274,7 @@ if PYDANTIC_V2: *, fields: Sequence[ModelField], model_name: str ) -> Type[BaseModel]: field_params = { - f"{f.field_info.alias}": (f.field_info.annotation, f.field_info) + f"{f.alias}": (f.field_info.annotation, f.field_info) for f in fields } BodyModel: Type[BaseModel] = create_model(model_name, **field_params) # type: ignore[call-overload] diff --git a/tests/test_alias_and_validation_alias_in_form.py b/tests/test_alias_and_validation_alias_in_form.py new file mode 100644 index 000000000..b3c85d9de --- /dev/null +++ b/tests/test_alias_and_validation_alias_in_form.py @@ -0,0 +1,47 @@ +from starlette.testclient import TestClient + +from fastapi import FastAPI, Form + +app: FastAPI = FastAPI() + + +@app.post("/testing_alias") +async def check_alias(id_test: int = Form(alias="otherId")): + return {"other_id": id_test} + +@app.post("/testing_validation_alias") +async def check_validation_alias(id_test: int = Form(validation_alias="otherId")): + return {"other_id": id_test} + + +client = TestClient(app) + + +def test_get_alias(): + response = client.post("/testing_alias", data={"otherId": "1"}) + assert response.status_code == 200 + assert response.json() == {"other_id": 1} + +def test_get_validation_alias(): + response = client.post("/testing_validation_alias", data={"otherId": "1"}) + assert response.status_code == 200 + assert response.json() == {"other_id": 1} + +def test_file_alias_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200, response.text + schema = response.json() + + assert ( + "otherId" + in schema["components"]["schemas"]["Body_check_alias_testing_alias_post"][ + "properties" + ] + ) + + assert ( + "otherId" + in schema["components"]["schemas"]["Body_check_validation_alias_testing_validation_alias_post"][ + "properties" + ] + ) diff --git a/tests/test_alias_in_form.py b/tests/test_alias_in_form.py deleted file mode 100644 index e8a11b6c7..000000000 --- a/tests/test_alias_in_form.py +++ /dev/null @@ -1,29 +0,0 @@ -from fastapi import FastAPI, Form -from starlette.testclient import TestClient - -app: FastAPI = FastAPI() - - -@app.post("/testing_alias") -async def check_alias(id_test: int = Form(alias="otherId")): - return {"other_id": id_test} - - -@app.patch("/testing") -async def check_without_alias(id_test: int = Form()): - return {"id_test": id_test} - - -client = TestClient(app) - - -def test_without_alias(): - response = client.patch("/testing", data={"id_test": 1}) - assert response.status_code == 200 - assert response.json() == {"id_test": 1} - - -def test_get_alias(): - response = client.post("/testing_alias", data={"otherId": "1"}) - assert response.status_code == 200 - assert response.json() == {"other_id": 1} From 6bd8a838b024b201d2230c4303c57cf0795ab74d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 03:48:31 +0000 Subject: [PATCH 6/8] =?UTF-8?q?=F0=9F=8E=A8=20[pre-commit.ci]=20Auto=20for?= =?UTF-8?q?mat=20from=20pre-commit.com=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/_compat.py | 3 +-- tests/test_alias_and_validation_alias_in_form.py | 12 +++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/fastapi/_compat.py b/fastapi/_compat.py index 1d13a0c80..9af0ffc38 100644 --- a/fastapi/_compat.py +++ b/fastapi/_compat.py @@ -274,8 +274,7 @@ if PYDANTIC_V2: *, fields: Sequence[ModelField], model_name: str ) -> Type[BaseModel]: field_params = { - f"{f.alias}": (f.field_info.annotation, f.field_info) - for f in fields + f"{f.alias}": (f.field_info.annotation, f.field_info) for f in fields } BodyModel: Type[BaseModel] = create_model(model_name, **field_params) # type: ignore[call-overload] return BodyModel diff --git a/tests/test_alias_and_validation_alias_in_form.py b/tests/test_alias_and_validation_alias_in_form.py index b3c85d9de..17f02011a 100644 --- a/tests/test_alias_and_validation_alias_in_form.py +++ b/tests/test_alias_and_validation_alias_in_form.py @@ -1,6 +1,5 @@ -from starlette.testclient import TestClient - from fastapi import FastAPI, Form +from starlette.testclient import TestClient app: FastAPI = FastAPI() @@ -9,6 +8,7 @@ app: FastAPI = FastAPI() async def check_alias(id_test: int = Form(alias="otherId")): return {"other_id": id_test} + @app.post("/testing_validation_alias") async def check_validation_alias(id_test: int = Form(validation_alias="otherId")): return {"other_id": id_test} @@ -22,11 +22,13 @@ def test_get_alias(): assert response.status_code == 200 assert response.json() == {"other_id": 1} + def test_get_validation_alias(): response = client.post("/testing_validation_alias", data={"otherId": "1"}) assert response.status_code == 200 assert response.json() == {"other_id": 1} + def test_file_alias_schema(): response = client.get("/openapi.json") assert response.status_code == 200, response.text @@ -41,7 +43,7 @@ def test_file_alias_schema(): assert ( "otherId" - in schema["components"]["schemas"]["Body_check_validation_alias_testing_validation_alias_post"][ - "properties" - ] + in schema["components"]["schemas"][ + "Body_check_validation_alias_testing_validation_alias_post" + ]["properties"] ) From ddc04298d90c0b758ded9accae10197d87a498c3 Mon Sep 17 00:00:00 2001 From: Harol Alvarado Date: Wed, 6 Mar 2024 23:03:22 -0500 Subject: [PATCH 7/8] add support to validation_alias in form when is instance of str and format code --- fastapi/_compat.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fastapi/_compat.py b/fastapi/_compat.py index 9af0ffc38..9626e537c 100644 --- a/fastapi/_compat.py +++ b/fastapi/_compat.py @@ -88,7 +88,10 @@ if PYDANTIC_V2: @property def alias(self) -> str: - a = self.field_info.validation_alias or self.field_info.alias + a = ( + isinstance(self.field_info.validation_alias, str) + and self.field_info.validation_alias + ) or self.field_info.alias return a if a is not None else self.name @property From da6d322e8f70e2d8b0458ced012cc251c68eb7a9 Mon Sep 17 00:00:00 2001 From: Harol Alvarado Date: Wed, 6 Mar 2024 23:18:18 -0500 Subject: [PATCH 8/8] add conditional to testing alias and validation_alias in PYDANTIC_V2 only --- .coverage.LAPTOP-7BUC2HHB.20644.XYqHRFXx | Bin 0 -> 299008 bytes ...test_alias_and_validation_alias_in_form.py | 41 +++++++++++------- 2 files changed, 25 insertions(+), 16 deletions(-) create mode 100644 .coverage.LAPTOP-7BUC2HHB.20644.XYqHRFXx diff --git a/.coverage.LAPTOP-7BUC2HHB.20644.XYqHRFXx b/.coverage.LAPTOP-7BUC2HHB.20644.XYqHRFXx new file mode 100644 index 0000000000000000000000000000000000000000..daba3e9edb6aa680f48e69e2e1408e9499ae15de GIT binary patch literal 299008 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 X+ylg$9h#oF7A|W(ItRu#geCqzuKx?D literal 0 HcmV?d00001 diff --git a/tests/test_alias_and_validation_alias_in_form.py b/tests/test_alias_and_validation_alias_in_form.py index 17f02011a..2454fe9dd 100644 --- a/tests/test_alias_and_validation_alias_in_form.py +++ b/tests/test_alias_and_validation_alias_in_form.py @@ -1,4 +1,9 @@ +""" +testing to fix incompatibility with alias and validation_alias between fastapi and PYDANTIC_V2 +""" + from fastapi import FastAPI, Form +from fastapi._compat import PYDANTIC_V2 from starlette.testclient import TestClient app: FastAPI = FastAPI() @@ -24,7 +29,11 @@ def test_get_alias(): def test_get_validation_alias(): - response = client.post("/testing_validation_alias", data={"otherId": "1"}) + if PYDANTIC_V2: + data = {"otherId": "1"} + else: + data = {"id_test": "1"} + response = client.post("/testing_validation_alias", data=data) assert response.status_code == 200 assert response.json() == {"other_id": 1} @@ -32,18 +41,18 @@ def test_get_validation_alias(): def test_file_alias_schema(): response = client.get("/openapi.json") assert response.status_code == 200, response.text - schema = response.json() - - assert ( - "otherId" - in schema["components"]["schemas"]["Body_check_alias_testing_alias_post"][ - "properties" - ] - ) - - assert ( - "otherId" - in schema["components"]["schemas"][ - "Body_check_validation_alias_testing_validation_alias_post" - ]["properties"] - ) + if PYDANTIC_V2: + schema = response.json() + assert ( + "otherId" + in schema["components"]["schemas"]["Body_check_alias_testing_alias_post"][ + "properties" + ] + ) + + assert ( + "otherId" + in schema["components"]["schemas"][ + "Body_check_validation_alias_testing_validation_alias_post" + ]["properties"] + )