Библиотека Gotenberg API упрощает работу с endpoint API для генерации скриншотов gotenberg.dev, предоставляя тонкую обёртку над веб API и библиотекой HTTPX.
Она добавляет к обычным возможностям HTTPX свои схемы данных, а также удобные, часто используемые функции, но не мешает, при необходимости, спускаться ниже на уровень HTTP-запросов.
Вы можете установить библиотеку с помощью pip
:
# Установить из публичного GitHub репозитория (рекомендуемый способ)
$ pip install git+https://github.com/devmanorg/gotenberg-api.git
# Установить из приватного GitLab репозитория (если у вас есть к нему доступ)
$ pip install git+https://gitlab.dvmn.org/dvmn/courses/fastapi/gotenberg-api.git
Библиотека использует асинхронный HTTPX клиент.
Для запуска требуется указать следующие настройки:
httpx.AsyncClient.base_url
- базовый адрес Gotenberg API. Обязательная настройка.ScreenshotHTMLRequest.width
- ширина скриншота в пикселях. Обязательная настройка.ScreenshotHTMLRequest.format
- формат скриншота (может принимать значенияjpeg
,png
,webp
). По-умолчанию -jpeg
.ScreenshotHTMLRequest.wait_delay
- время ожидания завершения анимаций на html-странице. По-умолчанию - 2 секунды.- опциональные настройки асинхронного клиента
Важно: время ожидания завершения анимаций должно быть меньше таймаута асинхронного клиента, иначе библиотека всегда будет возвращать TimeoutError
.
Рекомендуемая разница между временем ожидания и таймаутом составляет от 2 до 5 секунд.
Пример запроса:
import httpx
from gotenberg_api import GotenbergServerError, ScreenshotHTMLRequest
try:
async with httpx.AsyncClient(
base_url=settings_var.get().GOTENBERG_URL,
timeout=15,
) as client:
screenshot_bytes = await ScreenshotHTMLRequest(
index_html=raw_html,
width=1000,
format='png',
wait_delay=5,
).asend(client)
except GotenbergServerError as e:
logger.error(e)
screenshot_bytes = None
У библиотеки есть своё собственное исключение, которое через контекстный менеджер отлавливает исключение: