Spaces:
Sleeping
Sleeping
| """ | |
| SentinelEdge deployment server for Hugging Face Spaces. | |
| Adds static file serving to the demo backend app. | |
| """ | |
| import os | |
| import sys | |
| from pathlib import Path | |
| sys.path.insert(0, str(Path(__file__).resolve().parent)) | |
| import uvicorn | |
| from fastapi.staticfiles import StaticFiles | |
| from fastapi.responses import FileResponse | |
| # The demo backend app already has /api/* and /ws/* routes | |
| from demo.backend.main import app | |
| from hub.server import app as hub_app | |
| # Mount hub server at /hub | |
| app.mount("/hub", hub_app) | |
| # Serve built React frontend as static files | |
| static_dir = Path(__file__).parent / "static" | |
| if static_dir.exists(): | |
| async def serve_index() -> FileResponse: | |
| return FileResponse(str(static_dir / "index.html")) | |
| # Catch-all for SPA client-side routing (must be after API/WS routes) | |
| async def serve_spa(path: str) -> FileResponse: | |
| file_path = static_dir / path | |
| if file_path.exists() and file_path.is_file(): | |
| return FileResponse(str(file_path)) | |
| return FileResponse(str(static_dir / "index.html")) | |
| port = int(os.environ.get("PORT", 7860)) | |
| if __name__ == "__main__": | |
| uvicorn.run(app, host="0.0.0.0", port=port) | |