Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, UploadFile, File, BackgroundTasks, Depends | |
| from sqlalchemy.orm import Session | |
| from app.db.session import get_db | |
| from app.db.models import Job | |
| import uuid, os, shutil | |
| from app.core.config import settings | |
| from app.services.ml_services import run_full_pipeline | |
| from app.auth_deps import get_current_admin | |
| router = APIRouter() | |
| async def upload_dataset( | |
| file: UploadFile = File(...), | |
| background_tasks: BackgroundTasks = BackgroundTasks(), | |
| db: Session = Depends(get_db), | |
| _admin: int = Depends(get_current_admin), | |
| ): | |
| if not file.filename.endswith(".csv"): | |
| return {"error": "Only CSV files are supported"} | |
| job_id = str(uuid.uuid4()) | |
| job = Job(id=job_id, status="processing", filename=file.filename) | |
| db.add(job) | |
| db.commit() | |
| os.makedirs(settings.UPLOAD_DIR, exist_ok=True) | |
| filepath = f"{settings.UPLOAD_DIR}/{job_id}_{file.filename}" | |
| with open(filepath, "wb") as f: | |
| shutil.copyfileobj(file.file, f) | |
| background_tasks.add_task(run_full_pipeline, job_id, filepath) | |
| return { | |
| "job_id": job_id, | |
| "status": "processing", | |
| "message": "Dataset uploaded successfully. Pipeline is running." | |
| } |