from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import HTMLResponse from pydantic import BaseModel, Field from typing import List, Optional app = FastAPI(title="Quote Display API", version="1.0.0") app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], expose_headers=["Content-Disposition"], ) class Quote(BaseModel): text: str author: str class QuoteSet(BaseModel): title: str = "Quotes" quotes: List[Quote] def quote_html(title: str, quotes: List[dict]) -> str: quote_items = "" for quote in quotes: quote_items += f"""

"{quote['text']}"

— {quote['author']}
""" return f""" {title}

{title}

{quote_items}
""" @app.post("/display") def display_quotes(quote_set: QuoteSet): if not quote_set.quotes: raise HTTPException(status_code=400, detail="No quotes provided") quotes_dict = [{"text": q.text, "author": q.author} for q in quote_set.quotes] html_content = quote_html(quote_set.title, quotes_dict) headers = {"Content-Disposition": "inline"} return HTMLResponse(content=html_content, headers=headers) @app.get("/health") def health_check(): return {"status": "healthy"} @app.get("/") def home(): return HTMLResponse( content="""

Quote Display Tool

POST to /display with:

{
  "title": "My Quotes",
  "quotes": [
    {"text": "Hello world", "author": "Someone"}
  ]
}
""" ) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)