Sync fastapi docs from b5ca1324 on 2025-12-07
Issue Manager / issue-manager (push) Has been cancelled
Build Docs / changes (push) Has been cancelled
Build Docs / langs (push) Has been cancelled
Build Docs / build-docs (push) Has been cancelled
Build Docs / docs-all-green (push) Has been cancelled
Conflict detector / main (push) Has been cancelled
Test Redistribute / test-redistribute (fastapi) (push) Has been cancelled
Test Redistribute / test-redistribute (fastapi-slim) (push) Has been cancelled
Test Redistribute / test-redistribute-alls-green (push) Has been cancelled
Test / lint (push) Has been cancelled
Test / test (pydantic-v1, 3.10) (push) Has been cancelled
Test / test (pydantic-v1, 3.11) (push) Has been cancelled
Test / test (pydantic-v1, 3.13) (push) Has been cancelled
Test / test (pydantic-v1, 3.8) (push) Has been cancelled
Test / test (pydantic-v1, 3.9) (push) Has been cancelled
Test / test (pydantic-v2, 3.10) (push) Has been cancelled
Test / test (pydantic-v2, 3.11) (push) Has been cancelled
Test / test (pydantic-v2, 3.12) (push) Has been cancelled
Test / test (pydantic-v2, 3.13) (push) Has been cancelled
Test / test (pydantic-v2, 3.14) (push) Has been cancelled
Test / test (pydantic-v2, 3.8) (push) Has been cancelled
Test / test (pydantic-v2, 3.9) (push) Has been cancelled
Test / coverage-combine (push) Has been cancelled
Test / check (push) Has been cancelled
Label Approved / label-approved (push) Has been cancelled
FastAPI People Contributors / job (push) Has been cancelled
FastAPI People Sponsors / job (push) Has been cancelled
Update Topic Repos / topic-repos (push) Has been cancelled
FastAPI People / job (push) Has been cancelled
Test / test (pydantic-v1, 3.12) (push) Has been cancelled
Issue Manager / issue-manager (push) Has been cancelled
Build Docs / changes (push) Has been cancelled
Build Docs / langs (push) Has been cancelled
Build Docs / build-docs (push) Has been cancelled
Build Docs / docs-all-green (push) Has been cancelled
Conflict detector / main (push) Has been cancelled
Test Redistribute / test-redistribute (fastapi) (push) Has been cancelled
Test Redistribute / test-redistribute (fastapi-slim) (push) Has been cancelled
Test Redistribute / test-redistribute-alls-green (push) Has been cancelled
Test / lint (push) Has been cancelled
Test / test (pydantic-v1, 3.10) (push) Has been cancelled
Test / test (pydantic-v1, 3.11) (push) Has been cancelled
Test / test (pydantic-v1, 3.13) (push) Has been cancelled
Test / test (pydantic-v1, 3.8) (push) Has been cancelled
Test / test (pydantic-v1, 3.9) (push) Has been cancelled
Test / test (pydantic-v2, 3.10) (push) Has been cancelled
Test / test (pydantic-v2, 3.11) (push) Has been cancelled
Test / test (pydantic-v2, 3.12) (push) Has been cancelled
Test / test (pydantic-v2, 3.13) (push) Has been cancelled
Test / test (pydantic-v2, 3.14) (push) Has been cancelled
Test / test (pydantic-v2, 3.8) (push) Has been cancelled
Test / test (pydantic-v2, 3.9) (push) Has been cancelled
Test / coverage-combine (push) Has been cancelled
Test / check (push) Has been cancelled
Label Approved / label-approved (push) Has been cancelled
FastAPI People Contributors / job (push) Has been cancelled
FastAPI People Sponsors / job (push) Has been cancelled
Update Topic Repos / topic-repos (push) Has been cancelled
FastAPI People / job (push) Has been cancelled
Test / test (pydantic-v1, 3.12) (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,194 @@
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
|
||||
@dataclass
|
||||
class Item:
|
||||
name: str
|
||||
date: datetime
|
||||
price: Optional[float] = None
|
||||
owner_ids: Optional[List[int]] = None
|
||||
|
||||
|
||||
@app.get("/items/valid", response_model=Item)
|
||||
def get_valid():
|
||||
return {"name": "valid", "date": datetime(2021, 7, 26), "price": 1.0}
|
||||
|
||||
|
||||
@app.get("/items/object", response_model=Item)
|
||||
def get_object():
|
||||
return Item(
|
||||
name="object", date=datetime(2021, 7, 26), price=1.0, owner_ids=[1, 2, 3]
|
||||
)
|
||||
|
||||
|
||||
@app.get("/items/coerce", response_model=Item)
|
||||
def get_coerce():
|
||||
return {"name": "coerce", "date": datetime(2021, 7, 26).isoformat(), "price": "1.0"}
|
||||
|
||||
|
||||
@app.get("/items/validlist", response_model=List[Item])
|
||||
def get_validlist():
|
||||
return [
|
||||
{"name": "foo", "date": datetime(2021, 7, 26)},
|
||||
{"name": "bar", "date": datetime(2021, 7, 26), "price": 1.0},
|
||||
{
|
||||
"name": "baz",
|
||||
"date": datetime(2021, 7, 26),
|
||||
"price": 2.0,
|
||||
"owner_ids": [1, 2, 3],
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
@app.get("/items/objectlist", response_model=List[Item])
|
||||
def get_objectlist():
|
||||
return [
|
||||
Item(name="foo", date=datetime(2021, 7, 26)),
|
||||
Item(name="bar", date=datetime(2021, 7, 26), price=1.0),
|
||||
Item(name="baz", date=datetime(2021, 7, 26), price=2.0, owner_ids=[1, 2, 3]),
|
||||
]
|
||||
|
||||
|
||||
@app.get("/items/no-response-model/object")
|
||||
def get_no_response_model_object():
|
||||
return Item(
|
||||
name="object", date=datetime(2021, 7, 26), price=1.0, owner_ids=[1, 2, 3]
|
||||
)
|
||||
|
||||
|
||||
@app.get("/items/no-response-model/objectlist")
|
||||
def get_no_response_model_objectlist():
|
||||
return [
|
||||
Item(name="foo", date=datetime(2021, 7, 26)),
|
||||
Item(name="bar", date=datetime(2021, 7, 26), price=1.0),
|
||||
Item(name="baz", date=datetime(2021, 7, 26), price=2.0, owner_ids=[1, 2, 3]),
|
||||
]
|
||||
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
||||
def test_valid():
|
||||
response = client.get("/items/valid")
|
||||
response.raise_for_status()
|
||||
assert response.json() == {
|
||||
"name": "valid",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": 1.0,
|
||||
"owner_ids": None,
|
||||
}
|
||||
|
||||
|
||||
def test_object():
|
||||
response = client.get("/items/object")
|
||||
response.raise_for_status()
|
||||
assert response.json() == {
|
||||
"name": "object",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": 1.0,
|
||||
"owner_ids": [1, 2, 3],
|
||||
}
|
||||
|
||||
|
||||
def test_coerce():
|
||||
response = client.get("/items/coerce")
|
||||
response.raise_for_status()
|
||||
assert response.json() == {
|
||||
"name": "coerce",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": 1.0,
|
||||
"owner_ids": None,
|
||||
}
|
||||
|
||||
|
||||
def test_validlist():
|
||||
response = client.get("/items/validlist")
|
||||
response.raise_for_status()
|
||||
assert response.json() == [
|
||||
{
|
||||
"name": "foo",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": None,
|
||||
"owner_ids": None,
|
||||
},
|
||||
{
|
||||
"name": "bar",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": 1.0,
|
||||
"owner_ids": None,
|
||||
},
|
||||
{
|
||||
"name": "baz",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": 2.0,
|
||||
"owner_ids": [1, 2, 3],
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def test_objectlist():
|
||||
response = client.get("/items/objectlist")
|
||||
response.raise_for_status()
|
||||
assert response.json() == [
|
||||
{
|
||||
"name": "foo",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": None,
|
||||
"owner_ids": None,
|
||||
},
|
||||
{
|
||||
"name": "bar",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": 1.0,
|
||||
"owner_ids": None,
|
||||
},
|
||||
{
|
||||
"name": "baz",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": 2.0,
|
||||
"owner_ids": [1, 2, 3],
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def test_no_response_model_object():
|
||||
response = client.get("/items/no-response-model/object")
|
||||
response.raise_for_status()
|
||||
assert response.json() == {
|
||||
"name": "object",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": 1.0,
|
||||
"owner_ids": [1, 2, 3],
|
||||
}
|
||||
|
||||
|
||||
def test_no_response_model_objectlist():
|
||||
response = client.get("/items/no-response-model/objectlist")
|
||||
response.raise_for_status()
|
||||
assert response.json() == [
|
||||
{
|
||||
"name": "foo",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": None,
|
||||
"owner_ids": None,
|
||||
},
|
||||
{
|
||||
"name": "bar",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": 1.0,
|
||||
"owner_ids": None,
|
||||
},
|
||||
{
|
||||
"name": "baz",
|
||||
"date": datetime(2021, 7, 26).isoformat(),
|
||||
"price": 2.0,
|
||||
"owner_ids": [1, 2, 3],
|
||||
},
|
||||
]
|
||||
Reference in New Issue
Block a user