Spaces:
Runtime error
Runtime error
| """FastAPI application factory.""" | |
| from typing import List | |
| from fastapi import FastAPI, WebSocket, WebSocketDisconnect | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from fastapi.staticfiles import StaticFiles | |
| from fastapi.templating import Jinja2Templates | |
| from fastapi.responses import HTMLResponse | |
| from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Request | |
| from .routes import v1_router | |
| class ConnectionManager: | |
| def __init__(self): | |
| self.active_connections: List[WebSocket] = [] | |
| async def connect(self, websocket: WebSocket): | |
| await websocket.accept() | |
| self.active_connections.append(websocket) | |
| def disconnect(self, websocket: WebSocket): | |
| self.active_connections.remove(websocket) | |
| async def broadcast(self, message: str): | |
| for connection in self.active_connections: | |
| await connection.send_text(message) | |
| manager = ConnectionManager() | |
| templates = Jinja2Templates(directory="templates") | |
| def create_app() -> FastAPI: | |
| """Create and configure the FastAPI application.""" | |
| app = FastAPI() | |
| # Add CORS middleware | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| app.mount("/static", StaticFiles(directory="static"), name="static") | |
| # Include routers | |
| app.include_router(v1_router) | |
| async def startup_event(): | |
| """Run startup events.""" | |
| pass | |
| async def shutdown_event(): | |
| """Run shutdown events.""" | |
| pass | |
| async def websocket_endpoint(websocket: WebSocket): | |
| await manager.connect(websocket) | |
| try: | |
| while True: | |
| data = await websocket.receive_text() | |
| print(f"Received: {data}") | |
| await manager.broadcast(f"Message from client: {data}") | |
| except WebSocketDisconnect: | |
| manager.disconnect(websocket) | |
| await manager.broadcast("A client disconnected") | |
| async def broadcaster(request: Request, room_name: str): | |
| return templates.TemplateResponse("broadcaster.html", {"request": request, "room_name": room_name}) | |
| return app | |
| # Create default app instance | |
| app = create_app() | |