Spaces:
Running
Running
| 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() | |
| 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 | |
| ] | |
| ) | |
| def health() -> dict[str, str]: | |
| return {"status": "ok"} | |