diff --git a/tools/sprite-generation/IN_DEVELOPMENT_DONT_USE b/tools/sprite-generation/IN_DEVELOPMENT_DONT_USE new file mode 100644 index 00000000..e69de29b diff --git a/tools/sprite-generation/server.py b/tools/sprite-generation/server.py index 65ab7e18..091b74de 100644 --- a/tools/sprite-generation/server.py +++ b/tools/sprite-generation/server.py @@ -10,13 +10,15 @@ Usage: """ from __future__ import annotations +import asyncio import json +from datetime import datetime, timezone from pathlib import Path from typing import Annotated from fastapi import FastAPI, HTTPException, Query from fastapi.middleware.cors import CORSMiddleware -from fastapi.responses import FileResponse, JSONResponse +from fastapi.responses import FileResponse, JSONResponse, StreamingResponse from fastapi.staticfiles import StaticFiles from pydantic import BaseModel @@ -179,6 +181,31 @@ def create_app( registry.approve_variant(body.variant_id) return {"status": "approved", "variant_id": body.variant_id} + @app.get("/api/variants/recent") + def get_recent_variants( + limit: Annotated[int, Query(ge=1, le=100)] = 30, + ) -> list[dict]: + return registry.get_recent_variants(limit=limit) + + @app.get("/api/stream/variants") + async def stream_variants() -> StreamingResponse: + async def event_generator(): + last_check = datetime.now(timezone.utc).isoformat() + while True: + await asyncio.sleep(3) + new_variants = registry.get_recent_variants(limit=10, since=last_check) + if new_variants: + last_check = new_variants[0]["created_at"] + yield f"data: {json.dumps(new_variants)}\n\n" + else: + yield ": keepalive\n\n" + + return StreamingResponse( + event_generator(), + media_type="text/event-stream", + headers={"Cache-Control": "no-cache", "X-Accel-Buffering": "no"}, + ) + @app.get("/api/runs") def get_runs() -> list[dict]: return registry.get_runs() diff --git a/tools/sprite-generation/sprites.db b/tools/sprite-generation/sprites.db index 0e9227ba..6d677b80 100644 Binary files a/tools/sprite-generation/sprites.db and b/tools/sprite-generation/sprites.db differ