]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🐛 Fix truncating the model's description with form feed (`\f`) character for Pydantic...
authorMotov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Tue, 17 Jun 2025 07:46:27 +0000 (09:46 +0200)
committerGitHub <noreply@github.com>
Tue, 17 Jun 2025 07:46:27 +0000 (09:46 +0200)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
fastapi/_compat.py
tests/test_openapi_model_description_trim_on_formfeed.py [new file with mode: 0644]

index c07e4a3b002c39bb29c40afdd2c3ed9f20b94595..227ad837d1243f9bca93864dbb5fb8823814af80 100644 (file)
@@ -16,6 +16,7 @@ from typing import (
     Tuple,
     Type,
     Union,
+    cast,
 )
 
 from fastapi.exceptions import RequestErrorModel
@@ -231,6 +232,10 @@ if PYDANTIC_V2:
         field_mapping, definitions = schema_generator.generate_definitions(
             inputs=inputs
         )
+        for item_def in cast(Dict[str, Dict[str, Any]], definitions).values():
+            if "description" in item_def:
+                item_description = cast(str, item_def["description"]).split("\f")[0]
+                item_def["description"] = item_description
         return field_mapping, definitions  # type: ignore[return-value]
 
     def is_scalar_field(field: ModelField) -> bool:
diff --git a/tests/test_openapi_model_description_trim_on_formfeed.py b/tests/test_openapi_model_description_trim_on_formfeed.py
new file mode 100644 (file)
index 0000000..e18d4f6
--- /dev/null
@@ -0,0 +1,31 @@
+from fastapi import FastAPI
+from fastapi.testclient import TestClient
+from pydantic import BaseModel
+
+app = FastAPI()
+
+
+class MyModel(BaseModel):
+    """
+    A model with a form feed character in the title.
+    \f
+    Text after form feed character.
+    """
+
+
+@app.get("/foo")
+def foo(v: MyModel):  # pragma: no cover
+    pass
+
+
+client = TestClient(app)
+
+
+def test_openapi():
+    response = client.get("/openapi.json")
+    assert response.status_code == 200, response.text
+    openapi_schema = response.json()
+
+    assert openapi_schema["components"]["schemas"]["MyModel"]["description"] == (
+        "A model with a form feed character in the title.\n"
+    )