masamasa4's picture
Deploy layout-analysis from monorepo
f8835a3 verified
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"}