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,
|
Tuple,
|
||||||
Type,
|
Type,
|
||||||
Union,
|
Union,
|
||||||
|
cast,
|
||||||
)
|
)
|
||||||
|
|
||||||
from fastapi.exceptions import RequestErrorModel
|
from fastapi.exceptions import RequestErrorModel
|
||||||
|
|
@ -231,6 +232,10 @@ if PYDANTIC_V2:
|
||||||
field_mapping, definitions = schema_generator.generate_definitions(
|
field_mapping, definitions = schema_generator.generate_definitions(
|
||||||
inputs=inputs
|
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]
|
return field_mapping, definitions # type: ignore[return-value]
|
||||||
|
|
||||||
def is_scalar_field(field: ModelField) -> bool:
|
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