pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
626 B
25 lines
626 B
from collections.abc import AsyncIterable
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.sse import EventSourceResponse, ServerSentEvent
|
|
from pydantic import BaseModel
|
|
|
|
app = FastAPI()
|
|
|
|
|
|
class Item(BaseModel):
|
|
name: str
|
|
price: float
|
|
|
|
|
|
items = [
|
|
Item(name="Plumbus", price=32.99),
|
|
Item(name="Portal Gun", price=999.99),
|
|
Item(name="Meeseeks Box", price=49.99),
|
|
]
|
|
|
|
|
|
@app.get("/items/stream", response_class=EventSourceResponse)
|
|
async def stream_items() -> AsyncIterable[ServerSentEvent[Item]]:
|
|
for i, item in enumerate(items):
|
|
yield ServerSentEvent[Item](data=item, event="item_update", id=str(i + 1))
|
|
|