mirror of https://github.com/tiangolo/fastapi.git
🐛 Fix truncating the model's description with form feed (`\f`) character for Pydantic V2 (#13698)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
7565f580ce
commit
535d5b3f9f
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
)
|
||||
Loading…
Reference in New Issue