api_sequence.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from fastapi import FastAPI, UploadFile, File
  2. import shutil
  3. import os
  4. import asyncio
  5. from src.main import main as interpret_sequence
  6. from src.config import config
  7. app = FastAPI()
  8. UPLOAD_DIR = config.get("upload_dir", "uploads")
  9. os.makedirs(UPLOAD_DIR, exist_ok=True)
  10. # Очередь выполняющихся задач
  11. background_tasks = {}
  12. @app.post("/interpret/")
  13. async def interpret_sequence_api(file: UploadFile = File(...)):
  14. """
  15. Загружает файл .seq и запускает интерпретацию.
  16. """
  17. file_path = os.path.join(UPLOAD_DIR, file.filename)
  18. # Сохранение загруженного файла
  19. with open(file_path, "wb") as buffer:
  20. shutil.copyfileobj(file.file, buffer)
  21. task_id = file.filename # ID задачи - имя файла
  22. background_tasks[task_id] = "Processing"
  23. # Асинхронно запускаем интерпретацию
  24. try:
  25. await interpret_sequence(sequence_path=file_path, output_dir=config.get("output_dir"))
  26. background_tasks[task_id] = "Completed"
  27. except Exception as e:
  28. background_tasks[task_id] = f"Failed: {str(e)}"
  29. return {"status": "success", "task_id": task_id, "message": f"Файл {file.filename} обработан."}
  30. @app.get("/status/")
  31. async def get_status():
  32. """
  33. Возвращает статус всех выполняющихся задач.
  34. """
  35. return {"tasks": background_tasks}