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.
26 lines
686 B
26 lines
686 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]:
|
|
yield ServerSentEvent(comment="stream of item updates")
|
|
for i, item in enumerate(items):
|
|
yield ServerSentEvent(data=item, event="item_update", id=str(i + 1), retry=5000)
|
|
|