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}