vicky4s4s's picture
Upload 76 files
01e9350 verified
import gc
import logging
import os
import shutil
import tempfile
import time
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from chartmetric_summary_generator3 import final_score_calculation
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
SESSIONS_ROOT = os.path.join(BASE_DIR, "sessions") # all per-request dirs live here
os.makedirs(SESSIONS_ROOT, exist_ok=True)
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
)
logger = logging.getLogger(__name__)
def _cleanup_session(session_dir: str) -> None:
"""Remove the entire per-request temp directory, tolerating locked files."""
if not os.path.exists(session_dir):
return
try:
gc.collect()
time.sleep(0.1)
shutil.rmtree(session_dir, ignore_errors=True)
logger.info(f"Cleaned up session dir: {session_dir}")
except Exception as e:
logger.warning(f"Could not fully clean up {session_dir}: {e}")
@app.get("/")
def read_root():
return {"Hello": "200 ok"}
@app.post("/fanbase_score")
async def fanbase_score(request: Request):
session_dir = tempfile.mkdtemp(dir=SESSIONS_ROOT)
logger.info(f"Created session dir: {session_dir}")
try:
data = await request.json()
task_id = data["track_id"].strip()
logger.info(f"Processing start – task_id={task_id} session={session_dir}")
fanbase_score_count = final_score_calculation(task_id, session_dir)
logger.info(f"Fan Base Count: {fanbase_score_count}")
return {"fanbase_count": fanbase_score_count}
except Exception as e:
logger.error(f"Request failed: {e}")
return {"error": str(e)}
finally:
_cleanup_session(session_dir)