| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- from fastapi import FastAPI, UploadFile, File
- import shutil
- import os
- import asyncio
- from src.main import main as interpret_sequence
- from src.config import config
- app = FastAPI()
- UPLOAD_DIR = config.get("upload_dir", "uploads")
- os.makedirs(UPLOAD_DIR, exist_ok=True)
- # Очередь выполняющихся задач
- background_tasks = {}
- @app.post("/interpret/")
- async def interpret_sequence_api(file: UploadFile = File(...)):
- """
- Загружает файл .seq и запускает интерпретацию.
- """
- file_path = os.path.join(UPLOAD_DIR, file.filename)
- # Сохранение загруженного файла
- with open(file_path, "wb") as buffer:
- shutil.copyfileobj(file.file, buffer)
- task_id = file.filename # ID задачи - имя файла
- background_tasks[task_id] = "Processing"
- # Асинхронно запускаем интерпретацию
- try:
- await interpret_sequence(sequence_path=file_path, output_dir=config.get("output_dir"))
- background_tasks[task_id] = "Completed"
- except Exception as e:
- background_tasks[task_id] = f"Failed: {str(e)}"
- return {"status": "success", "task_id": task_id, "message": f"Файл {file.filename} обработан."}
- @app.get("/status/")
- async def get_status():
- """
- Возвращает статус всех выполняющихся задач.
- """
- return {"tasks": background_tasks}
|