from collections.abc import AsyncGenerator from contextlib import asynccontextmanager from typing import Union from fastapi import FastAPI from pydantic import BaseModel class Item(BaseModel): name: str description: Union[str, None] = None price: float tax: Union[float, None] = None @asynccontextmanager async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: yield app = FastAPI(lifespan=lifespan) @app.post("/items/") async def create_item(item: Item): item_dict = item.model_dump() if item.tax is not None: price_with_tax = item.price + item.tax item_dict.update({"price_with_tax": price_with_tax}) return item_dict