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
56 lines
1.4 KiB
Python
56 lines
1.4 KiB
Python
from dataclasses import field # (1)
|
|
from typing import List, Union
|
|
|
|
from fastapi import FastAPI
|
|
from pydantic.dataclasses import dataclass # (2)
|
|
|
|
|
|
@dataclass
|
|
class Item:
|
|
name: str
|
|
description: Union[str, None] = None
|
|
|
|
|
|
@dataclass
|
|
class Author:
|
|
name: str
|
|
items: List[Item] = field(default_factory=list) # (3)
|
|
|
|
|
|
app = FastAPI()
|
|
|
|
|
|
@app.post("/authors/{author_id}/items/", response_model=Author) # (4)
|
|
async def create_author_items(author_id: str, items: List[Item]): # (5)
|
|
return {"name": author_id, "items": items} # (6)
|
|
|
|
|
|
@app.get("/authors/", response_model=List[Author]) # (7)
|
|
def get_authors(): # (8)
|
|
return [ # (9)
|
|
{
|
|
"name": "Breaters",
|
|
"items": [
|
|
{
|
|
"name": "Island In The Moon",
|
|
"description": "A place to be playin' and havin' fun",
|
|
},
|
|
{"name": "Holy Buddies"},
|
|
],
|
|
},
|
|
{
|
|
"name": "System of an Up",
|
|
"items": [
|
|
{
|
|
"name": "Salt",
|
|
"description": "The kombucha mushroom people's favorite",
|
|
},
|
|
{"name": "Pad Thai"},
|
|
{
|
|
"name": "Lonely Night",
|
|
"description": "The mostests lonliest nightiest of allest",
|
|
},
|
|
],
|
|
},
|
|
]
|