|
from fastapi import FastAPI, HTTPException |
|
from fastapi.middleware.cors import CORSMiddleware |
|
from pydantic import BaseModel |
|
from typing import Dict |
|
import uuid |
|
from datetime import datetime |
|
|
|
app = FastAPI() |
|
|
|
|
|
app.add_middleware( |
|
CORSMiddleware, |
|
allow_origins=["*"], |
|
allow_methods=["*"], |
|
allow_headers=["*"], |
|
) |
|
|
|
|
|
jobs_db: Dict[str, Dict] = {} |
|
|
|
class PostRequest(BaseModel): |
|
query: str |
|
topic: str |
|
date: str |
|
|
|
@app.post("/index") |
|
async def create_job(request: PostRequest): |
|
"""Receive query/topic/date and return job ID""" |
|
job_id = str(uuid.uuid4()) |
|
|
|
|
|
jobs_db[job_id] = { |
|
"status": "processing", |
|
"request": request.dict(), |
|
"created_at": datetime.now().isoformat(), |
|
"result": None |
|
} |
|
|
|
|
|
|
|
jobs_db[job_id]["result"] = { |
|
"query": request.query, |
|
"topic": request.topic, |
|
"date_interval": request.date, |
|
"processed_data": f"Analysis result for {request.query} ({request.topic})" |
|
} |
|
jobs_db[job_id]["status"] = "completed" |
|
|
|
return {"status": "success", "id": job_id} |
|
|
|
@app.get("/loading") |
|
async def get_results(id: str): |
|
"""Check job status with simulated processing delay""" |
|
if id not in jobs_db: |
|
raise HTTPException(status_code=404, detail="Job not found") |
|
|
|
job = jobs_db[id] |
|
|
|
|
|
if job["status"] == "processing": |
|
elapsed = (datetime.now() - datetime.fromisoformat(job["created_at"])).seconds |
|
if elapsed < 5: |
|
await asyncio.sleep(2) |
|
return {"status": "processing"} |
|
|
|
|
|
if elapsed > 15 or random.random() > 0.7: |
|
job["status"] = "completed" |
|
job["result"] = { |
|
"processed_data": f"Result for {job['request']['query']}", |
|
"completion_time": elapsed |
|
} |
|
|
|
if job["status"] == "completed": |
|
return { |
|
"status": "completed", |
|
"result": job["result"], |
|
"request": job["request"] |
|
} |
|
|
|
return {"status": "processing"} |