Spaces:
Running
Running
File size: 1,466 Bytes
c7368f9 f8835a3 c7368f9 f8835a3 c7368f9 f8835a3 c7368f9 f8835a3 c7368f9 | 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 44 45 46 47 48 49 50 | import base64
import tempfile
from pathlib import Path
from fastapi import APIRouter, Depends, UploadFile
from controller.schemas import ExtractFiguresResponse, FigureResponse
from dependencies import get_extract_figures_use_case
from domain.errors.extraction_error import FigureExtractionError
from usecase.extract_figures import ExtractFiguresUseCase
router = APIRouter()
@router.post("/extract-figures", response_model=ExtractFiguresResponse)
def extract_figures(
file: UploadFile,
use_case: ExtractFiguresUseCase = Depends(get_extract_figures_use_case),
) -> ExtractFiguresResponse:
with tempfile.NamedTemporaryFile(suffix=".pdf", delete=True) as tmp:
tmp.write(file.file.read())
tmp.flush()
pdf_path = Path(tmp.name)
try:
figures = use_case.execute(pdf_path)
except FigureExtractionError:
raise
except Exception as e:
raise FigureExtractionError(
f"Unexpected error during extraction: {e}"
) from e
return ExtractFiguresResponse(
figures=[
FigureResponse(
image_base64=base64.b64encode(fig.image_bytes).decode(),
caption=fig.caption,
figure_number=fig.figure_number,
page_number=fig.page_number,
)
for fig in figures
]
)
@router.get("/health")
def health() -> dict[str, str]:
return {"status": "ok"}
|