Spaces:
Sleeping
Sleeping
File size: 1,733 Bytes
57cf043 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import logging
from fastapi import APIRouter, Response, UploadFile, Depends
from fastapi.responses import FileResponse
from schemas.document import Document
from components.services.document import DocumentService
import common.dependencies as DI
router = APIRouter(prefix='/datasets/{dataset_id}/documents')
logger = logging.getLogger(__name__)
@router.get('/{document_id}')
async def get_document(document_id: int, dataset_id: int | None = None,
document_service: DocumentService = Depends(DI.get_document_service)) -> 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
@router.delete('/{document_id}')
async def delete_document(dataset_id: int, document_id: int,
document_service: DocumentService = Depends(DI.get_document_service)) -> None:
document_service.delete_document(dataset_id, document_id)
return Response(status_code=200)
@router.post('/')
async def add_document(dataset_id: int, file: UploadFile,
document_service: DocumentService = Depends(DI.get_document_service)) -> Document:
return document_service.add_document(dataset_id, file)
|