test / app.py
cfa911
Simulated delay
70e30f8
raw
history blame
2.51 kB
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()
# Enable CORS for React Native development
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
# In-memory "database" (replace with real DB in production)
jobs_db: Dict[str, Dict] = {}
class PostRequest(BaseModel):
query: str
topic: str
date: str # Format: "DD-MM-YYYY to DD-MM-YYYY"
@app.post("/index")
async def create_job(request: PostRequest):
"""Receive query/topic/date and return job ID"""
job_id = str(uuid.uuid4())
# Store the job (simulating background processing)
jobs_db[job_id] = {
"status": "processing",
"request": request.dict(),
"created_at": datetime.now().isoformat(),
"result": None
}
# Simulate processing completion after 5 seconds
# In real apps, use Celery/BackgroundTasks
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]
# Simulate variable processing time (5-25 seconds)
if job["status"] == "processing":
elapsed = (datetime.now() - datetime.fromisoformat(job["created_at"])).seconds
if elapsed < 5: # Minimum processing time
await asyncio.sleep(2) # Artificial delay
return {"status": "processing"}
# Mark as completed after random time (for demo)
if elapsed > 15 or random.random() > 0.7: # 30% chance after 15s
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"}