Spaces:
Runtime error
Runtime error
| import logging | |
| from typing import Annotated | |
| from fastapi import APIRouter, Response, UploadFile, Depends | |
| from fastapi.responses import FileResponse | |
| from common import auth | |
| from schemas.document import Document | |
| from components.services.document import DocumentService | |
| import common.dependencies as DI | |
| router = APIRouter(prefix='/datasets/{dataset_id}/documents', tags=['Documents']) | |
| logger = logging.getLogger(__name__) | |
| async def get_document(document_id: int, | |
| document_service: Annotated[DocumentService, Depends(DI.get_document_service)], | |
| current_user: Annotated[any, Depends(auth.get_current_user)], | |
| dataset_id: int | None = None | |
| ) -> FileResponse: | |
| logger.info(f"Handling GET request to /documents/{document_id}") | |
| try: | |
| result = document_service.get_document(document_id, dataset_id) | |
| logger.info(f"Successfully retrieved document info for ID {document_id}") | |
| return FileResponse( | |
| path=result.filepath, | |
| filename=result.filename, | |
| media_type="application/xml", | |
| headers={"Content-Type": "application/xml; charset=cp866"}, #TODO: charset=cp866 выглядит как дичь | |
| ) | |
| except Exception as e: | |
| logger.error(f"Error retrieving document {document_id}: {str(e)}") | |
| raise | |
| async def delete_document(dataset_id: int, document_id: int, | |
| document_service: Annotated[DocumentService, Depends(DI.get_document_service)], | |
| current_user: Annotated[any, Depends(auth.get_current_user)] | |
| ) -> None: | |
| document_service.delete_document(dataset_id, document_id) | |
| return Response(status_code=200) | |
| async def add_document(dataset_id: int, file: UploadFile, | |
| document_service: Annotated[DocumentService, Depends(DI.get_document_service)], | |
| current_user: Annotated[any, Depends(auth.get_current_user)] | |
| ) -> Document: | |
| return document_service.add_document(dataset_id, file) | |