Spaces:
Running
Running
| from fastapi import FastAPI, HTTPException | |
| from fastapi.responses import HTMLResponse | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from fastapi.middleware.gzip import GZipMiddleware | |
| from pydantic import BaseModel | |
| from . import router | |
| # ------------------------------------------------------- | |
| # FastAPI app | |
| # ------------------------------------------------------- | |
| app = FastAPI(title="Stock / Index Backend") | |
| # ------------------------------------------------------- | |
| # Middleware | |
| # ------------------------------------------------------- | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| app.add_middleware(GZipMiddleware, minimum_size=1000) | |
| # ------------------------------------------------------- | |
| # Request model | |
| # ------------------------------------------------------- | |
| class FetchRequest(BaseModel): | |
| mode: str | |
| req_type: str | |
| name: str = "" | |
| date_start: str = "" | |
| date_end: str = "" | |
| # ------------------------------------------------------- | |
| # Health | |
| # ------------------------------------------------------- | |
| def health(): | |
| return {"status": "ok", "service": "backend alive"} | |
| # ------------------------------------------------------- | |
| # Main API | |
| # ------------------------------------------------------- | |
| def fetch_data(req: FetchRequest): | |
| mode = req.mode.lower() | |
| # ✅ Used by frontend on page load | |
| if mode == "list": | |
| return HTMLResponse(content=router.build_req_type_list_html()) | |
| if mode == "stock": | |
| html = router.handle_stock(req) | |
| elif mode == "index": | |
| html = router.handle_index(req) | |
| elif mode == "screener": | |
| html = router.handle_screener(req) | |
| else: | |
| raise HTTPException(status_code=400, detail="Invalid mode") | |
| # 🔒 Always return HTML | |
| return HTMLResponse(content=str(html)) | |