Spaces:
Sleeping
Sleeping
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) | |