Spaces:
Runtime error
Runtime error
| import logging | |
| from typing import Annotated | |
| from fastapi import (APIRouter, BackgroundTasks, Depends, HTTPException, | |
| Response, UploadFile) | |
| from common import auth | |
| import common.dependencies as DI | |
| from components.services.dataset import DatasetService | |
| from schemas.dataset import (Dataset, DatasetExpanded, DatasetProcessing, | |
| SortQuery, SortQueryList) | |
| router = APIRouter(prefix='/datasets', tags=['Datasets']) | |
| logger = logging.getLogger(__name__) | |
| async def get_datasets(dataset_service: Annotated[DatasetService, Depends(DI.get_dataset_service)], | |
| current_user: Annotated[any, Depends(auth.get_current_user)] | |
| ) -> list[Dataset]: | |
| logger.info("Handling GET request to /datasets") | |
| try: | |
| result = dataset_service.get_datasets() | |
| logger.info(f"Successfully retrieved {len(result)} datasets") | |
| return result | |
| except Exception as e: | |
| logger.error(f"Error retrieving datasets: {str(e)}") | |
| raise | |
| async def get_processing(dataset_service: Annotated[DatasetService, Depends(DI.get_dataset_service)], | |
| current_user: Annotated[any, Depends(auth.get_current_user)] | |
| ) -> DatasetProcessing: | |
| logger.info("Handling GET request to /datasets/processing") | |
| try: | |
| result = dataset_service.get_processing() | |
| logger.info(f"Successfully retrieved processing status: {result.status}") | |
| return result | |
| except Exception as e: | |
| logger.error(f"Error retrieving processing status: {str(e)}") | |
| raise | |
| # def try_create_default_dataset(dataset_service: DatasetService): | |
| # """ | |
| # Создаёт датасет по умолчанию, если такого нет. | |
| # """ | |
| # if not dataset_service.get_default_dataset(): | |
| # print('creating default dataset') | |
| # if dataset_service.config.db_config.files.empty_start: | |
| # dataset_service.create_empty_dataset(is_default=True) | |
| # else: | |
| # dataset_service.create_dataset_from_directory( | |
| # is_default=True, | |
| # directory_with_documents=dataset_service.config.db_config.files.documents_path, | |
| # ) | |
| # @router.get('/try_init_default_dataset') | |
| # async def try_init_default_dataset(dataset_service: Annotated[DatasetService, Depends(DI.get_dataset_service)], | |
| # current_user: Annotated[any, Depends(auth.get_current_user)]): | |
| # logger.info(f"Handling GET request try_init_default_dataset") | |
| # try_create_default_dataset(dataset_service) | |
| # try: | |
| # return {"ok": True} | |
| # except Exception as e: | |
| # logger.error(f"Error creating default dataset: {str(e)}") | |
| # raise | |
| async def get_dataset( | |
| dataset_id: int, | |
| dataset_service: Annotated[DatasetService, Depends(DI.get_dataset_service)], | |
| current_user: Annotated[any, Depends(auth.get_current_user)], | |
| page: int = 1, | |
| page_size: int = 20, | |
| search: str = '', | |
| sort: str = '' | |
| ) -> DatasetExpanded: | |
| logger.info(f"Handling GET request to /datasets/{dataset_id} (page={page}, size={page_size}, search='{search}')") | |
| if sort: | |
| try: | |
| sorts = [] | |
| for one in sort.split(','): | |
| field, direction = one.split(':') | |
| sorts.append(SortQuery(field=field, direction=direction)) | |
| sort = SortQueryList(sorts=sorts) | |
| except ValueError: | |
| raise HTTPException( | |
| status_code=400, | |
| detail="Invalid sort format. Expected format: 'field:direction,field:direction'", | |
| ) | |
| try: | |
| result = dataset_service.get_dataset( | |
| dataset_id, | |
| page=page, | |
| page_size=page_size, | |
| search=search, | |
| sort=sort, | |
| ) | |
| logger.info(f"Successfully retrieved dataset {dataset_id}") | |
| return result | |
| except Exception as e: | |
| logger.error(f"Error retrieving dataset {dataset_id}: {str(e)}") | |
| raise e | |
| async def create_draft(parent_id: int, dataset_service: Annotated[DatasetService, Depends(DI.get_dataset_service)], | |
| current_user: Annotated[any, Depends(auth.get_current_user)] | |
| ) -> Dataset: | |
| logger.info(f"Handling POST request to /datasets/{parent_id}/edit") | |
| try: | |
| result = dataset_service.create_draft(parent_id) | |
| logger.info(f"Successfully created draft from dataset {parent_id}") | |
| return result | |
| except Exception as e: | |
| logger.error(f"Error creating draft from dataset {parent_id}: {str(e)}") | |
| raise e | |
| async def make_active(dataset_id: int, dataset_service: Annotated[DatasetService, Depends(DI.get_dataset_service)], | |
| background_tasks: BackgroundTasks, | |
| current_user: Annotated[any, Depends(auth.get_current_user)] | |
| ) -> DatasetExpanded: | |
| logger.info(f"Handling POST request to /datasets/{dataset_id}/activate") | |
| try: | |
| result = await dataset_service.activate_dataset(dataset_id, background_tasks) | |
| logger.info(f"Successfully activated dataset {dataset_id}") | |
| return result | |
| except Exception as e: | |
| logger.error(f"Error activating dataset {dataset_id}: {str(e)}") | |
| raise e | |
| async def delete_dataset(dataset_id: int, | |
| dataset_service: Annotated[DatasetService, Depends(DI.get_dataset_service)], | |
| current_user: Annotated[any, Depends(auth.get_current_user)] | |
| ) -> None: | |
| logger.info(f"Handling DELETE request to /datasets/{dataset_id}") | |
| try: | |
| dataset_service.delete_dataset(dataset_id) | |
| logger.info(f"Successfully deleted dataset {dataset_id}") | |
| return Response(status_code=200) | |
| except Exception as e: | |
| logger.error(f"Error deleting dataset {dataset_id}: {str(e)}") | |
| raise e | |
| async def upload_zip(file: UploadFile, | |
| dataset_service: Annotated[DatasetService, Depends(DI.get_dataset_service)], | |
| current_user: Annotated[any, Depends(auth.get_current_user)] | |
| ) -> DatasetExpanded: | |
| logger.info(f"Handling POST request to /datasets/upload with file {file.filename}") | |
| try: | |
| result = dataset_service.upload_zip(file) | |
| logger.info("Successfully uploaded and processed dataset") | |
| return result | |
| except Exception as e: | |
| logger.error(f"Error uploading dataset: {str(e)}") | |
| raise e | |