/
FlysAt
/
DataFoundry
Обзор
Документация
Войти
/
FlysAt
/
DataFoundry
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/src/api/datasets.py
95 строк
3 KB
AlexanderShmygol
add endpoint download condition
17 май 2026, 19:35
17 май 2026, 19:35
8779f5e
Код
Авторство
О чём код?
from io import BytesIO from urllib.parse import quote from fastapi import APIRouter, Depends, File, UploadFile, status from fastapi.responses import StreamingResponse from sqlalchemy.ext.asyncio import AsyncSession from src.api.services.order_dataset import OrderDatasetService from src.core.db import get_db from src.dependencies.auth import get_current_user from src.models.user import User from src.schemas.order_dataset import ( CurrentDatasetPartsSchema, DatasetPartSchema, OrderDatasetCreateSchema, OrderDatasetSchema, ) router = APIRouter(prefix="/datasets", tags=["datasets"]) @router.post("", response_model=OrderDatasetSchema, status_code=status.HTTP_201_CREATED) async def create_dataset( payload: OrderDatasetCreateSchema, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ): service = OrderDatasetService(db) return await service.create_dataset(payload, current_user) @router.get("/{dataset_id}/parts", response_model=CurrentDatasetPartsSchema) async def list_current_dataset_parts( dataset_id: int, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ): service = OrderDatasetService(db) return await service.get_current_parts(dataset_id, current_user) @router.post( "/{dataset_id}/parts", response_model=DatasetPartSchema, status_code=status.HTTP_201_CREATED, ) async def add_dataset_part( dataset_id: int, part: UploadFile = File(...), db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ): service = OrderDatasetService(db) return await service.add_dataset_part(dataset_id, part, current_user) @router.put( "/{dataset_id}/condition", response_model=DatasetPartSchema, status_code=status.HTTP_201_CREATED, ) async def replace_text_condition( dataset_id: int, condition: UploadFile = File(...), db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ): service = OrderDatasetService(db) return await service.replace_text_condition(dataset_id, condition, current_user) @router.get("/{dataset_id}/condition") async def download_text_condition( dataset_id: int, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ): service = OrderDatasetService(db) payload, filename = await service.download_text_condition(dataset_id, current_user) return StreamingResponse( BytesIO(payload), media_type="application/zip", headers={"Content-Disposition": f"attachment; filename*=UTF-8''{quote(filename)}"}, ) @router.delete("/{dataset_id}/parts/{part_id}", status_code=status.HTTP_204_NO_CONTENT) async def remove_dataset_part( dataset_id: int, part_id: int, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ): service = OrderDatasetService(db) await service.remove_dataset_part(dataset_id, part_id, current_user)