File size: 1,253 Bytes
de68d43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from __future__ import annotations

import logging

from core.service.playwright import AsyncPlaywrightContext, TimeoutError
from core.service.playwright.models import PageModel, ScreenshotModel
from fastapi import APIRouter, HTTPException
from fastapi.responses import Response

router = APIRouter()
playwright_context = AsyncPlaywrightContext()


@router.post("/screenshot", tags=["V1"])
async def screenshot(
    screenshot_model: ScreenshotModel,
    page_model: PageModel | None = None,
) -> Response:
    page_model = page_model if page_model else PageModel()
    async with playwright_context as sc:
        try:
            response = await sc.screenshot(screenshot_model=screenshot_model, page_model=page_model)
            return Response(content=response, media_type="image/png")
        except TimeoutError as e:
            status_code = 504 if isinstance(e, TimeoutError) else 400
            detail = f"An error occurred while generating the screenshot: {e}"
            raise HTTPException(status_code=status_code, detail=detail) from e
        except Exception as e:
            logging.exception("Unhandled error in screenshot generation")
            raise HTTPException(status_code=500, detail="An unexpected error occurred") from e