From 3fee7ae7a8f638ab2325a37101fd5e6475b62207 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Tue, 10 Oct 2023 13:12:24 -0700 Subject: [PATCH] Initial development work on a Python client for the Gotenberg API, with most routes implemented --- .docker/docker-compose.ci-test.yml | 12 + .editorconfig | 37 +++ .github/dependabot.yml | 25 ++ .github/workflows/ci.yml | 178 +++++++++++++ .gitignore | 3 + .pre-commit-config.yaml | 46 ++++ CHANGELOG.md | 17 ++ README.md | 123 ++++++++- pyproject.toml | 232 +++++++++++++++++ src/gotenberg_client/__about__.py | 4 + src/gotenberg_client/__init__.py | 6 + src/gotenberg_client/_base.py | 122 +++++++++ src/gotenberg_client/_client.py | 72 ++++++ src/gotenberg_client/_convert/__init__.py | 3 + src/gotenberg_client/_convert/chromium.py | 174 +++++++++++++ src/gotenberg_client/_convert/common.py | 31 +++ src/gotenberg_client/_convert/libre_office.py | 55 ++++ src/gotenberg_client/_convert/pdfa.py | 34 +++ src/gotenberg_client/_health.py | 131 ++++++++++ src/gotenberg_client/_merge.py | 36 +++ src/gotenberg_client/_metrics.py | 3 + src/gotenberg_client/_types_compat.py | 10 + src/gotenberg_client/_utils.py | 42 +++ src/gotenberg_client/options.py | 101 ++++++++ src/gotenberg_client/py.typed | 0 tests/__init__.py | 3 + tests/conftest.py | 24 ++ tests/samples/basic.html | 10 + tests/samples/complex.html | 38 +++ tests/samples/font.woff | Bin 0 -> 12644 bytes tests/samples/footer.html | 13 + tests/samples/header.html | 13 + tests/samples/img.gif | Bin 0 -> 29685 bytes tests/samples/markdown1.md | 3 + tests/samples/markdown2.md | 3 + tests/samples/markdown_index.html | 31 +++ tests/samples/sample.docx | Bin 0 -> 6191 bytes tests/samples/sample.ods | Bin 0 -> 9220 bytes tests/samples/sample.odt | Bin 0 -> 8339 bytes tests/samples/sample.xlsx | Bin 0 -> 4801 bytes tests/samples/sample1.pdf | Bin 0 -> 208299 bytes tests/samples/style.css | 28 ++ tests/test_convert_chromium_html.py | 139 ++++++++++ tests/test_convert_chromium_markdown.py | 19 ++ tests/test_convert_chromium_url.py | 241 ++++++++++++++++++ tests/test_convert_libre_office.py | 127 +++++++++ tests/test_convert_pdf_a.py | 59 +++++ tests/test_health.py | 15 ++ tests/test_merge.py | 70 +++++ tests/utils.py | 15 ++ 50 files changed, 2346 insertions(+), 2 deletions(-) create mode 100644 .docker/docker-compose.ci-test.yml create mode 100644 .editorconfig create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .pre-commit-config.yaml create mode 100644 CHANGELOG.md create mode 100644 pyproject.toml create mode 100644 src/gotenberg_client/__about__.py create mode 100644 src/gotenberg_client/__init__.py create mode 100644 src/gotenberg_client/_base.py create mode 100644 src/gotenberg_client/_client.py create mode 100644 src/gotenberg_client/_convert/__init__.py create mode 100644 src/gotenberg_client/_convert/chromium.py create mode 100644 src/gotenberg_client/_convert/common.py create mode 100644 src/gotenberg_client/_convert/libre_office.py create mode 100644 src/gotenberg_client/_convert/pdfa.py create mode 100644 src/gotenberg_client/_health.py create mode 100644 src/gotenberg_client/_merge.py create mode 100644 src/gotenberg_client/_metrics.py create mode 100644 src/gotenberg_client/_types_compat.py create mode 100644 src/gotenberg_client/_utils.py create mode 100644 src/gotenberg_client/options.py create mode 100644 src/gotenberg_client/py.typed create mode 100644 tests/__init__.py create mode 100644 tests/conftest.py create mode 100644 tests/samples/basic.html create mode 100644 tests/samples/complex.html create mode 100644 tests/samples/font.woff create mode 100644 tests/samples/footer.html create mode 100644 tests/samples/header.html create mode 100644 tests/samples/img.gif create mode 100644 tests/samples/markdown1.md create mode 100644 tests/samples/markdown2.md create mode 100644 tests/samples/markdown_index.html create mode 100755 tests/samples/sample.docx create mode 100755 tests/samples/sample.ods create mode 100755 tests/samples/sample.odt create mode 100755 tests/samples/sample.xlsx create mode 100755 tests/samples/sample1.pdf create mode 100644 tests/samples/style.css create mode 100644 tests/test_convert_chromium_html.py create mode 100644 tests/test_convert_chromium_markdown.py create mode 100644 tests/test_convert_chromium_url.py create mode 100644 tests/test_convert_libre_office.py create mode 100644 tests/test_convert_pdf_a.py create mode 100644 tests/test_health.py create mode 100644 tests/test_merge.py create mode 100644 tests/utils.py diff --git a/.docker/docker-compose.ci-test.yml b/.docker/docker-compose.ci-test.yml new file mode 100644 index 0000000..e47ea4a --- /dev/null +++ b/.docker/docker-compose.ci-test.yml @@ -0,0 +1,12 @@ +# docker-compose file for running testing with gotenberg container +# Can be used locally or by the CI to start the nessecary container with the +# correct networking for the tests + +version: "3" +services: + gotenberg: + image: docker.io/gotenberg/gotenberg:7.9.2 + hostname: gotenberg + container_name: gotenberg + network_mode: host + restart: unless-stopped diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3ee7021 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,37 @@ +# EditorConfig: http://EditorConfig.org + +root = true + +[*] +indent_style = tab +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true +end_of_line = lf +charset = utf-8 +max_line_length = 88 + +[{*.html,*.css,*.js}] +max_line_length = off + +[*.py] +indent_size = 4 +indent_style = space + +[*.{yml,yaml}] +indent_style = space + +[*.rst] +indent_style = space + +[*.md] +indent_style = space + +# Tests don't get a line width restriction. It's still a good idea to follow +# the 79 character rule, but in the interests of clarity, tests often need to +# violate it. +[**/test_*.py] +max_line_length = off + +[*.toml*] +indent_style = space diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..6e47ec0 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,25 @@ +# https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates#package-ecosystem + +version: 2 +updates: + + # Enable version updates for Python + - package-ecosystem: "pip" + target-branch: "develop" + # Look for a `Pipfile` in the `root` directory + directory: "/" + # Check for updates once a week + schedule: + interval: "weekly" + labels: + - "dependencies" + + # Enable updates for Github Actions + - package-ecosystem: "github-actions" + target-branch: "develop" + directory: "/" + schedule: + # Check for updates to GitHub Actions every month + interval: "monthly" + labels: + - "dependencies" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bd130e3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,178 @@ +name: ci + +on: + push: + pull_request: + branches: + - main + - develop + +concurrency: + group: test-${{ github.ref_name }} + cancel-in-progress: true + +env: + PYTHONUNBUFFERED: "1" + FORCE_COLOR: "1" + +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - + uses: actions/checkout@v3 + - + name: Set up Python 3.10 + uses: actions/setup-python@v4 + with: + python-version: '3.10' + cache: 'pip' + - + name: Install Hatch + run: | + pip3 --quiet install --upgrade hatch + - + name: Lint project + run: | + hatch run lint:all + - + name: Check files with pre-commit + uses: pre-commit/action@v3.0.0 + test: + name: Python ${{ matrix.python-version }} + runs-on: ubuntu-latest + permissions: + contents: read + needs: + - lint + strategy: + fail-fast: false + matrix: + # No pikepdf wheels for pypy3.8 + python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', 'pypy3.9'] + + steps: + - + uses: actions/checkout@v3 + - + name: Start containers + run: | + docker compose --file ${GITHUB_WORKSPACE}/.docker/docker-compose.ci-test.yml pull --quiet + docker compose --file ${GITHUB_WORKSPACE}/.docker/docker-compose.ci-test.yml up --detach + echo "Wait for container to be started" + sleep 5 + - + name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' + - + name: Install Hatch + run: pip install --upgrade hatch + - + name: Run tests + run: hatch run cov + - + name: Upload coverage to Codecov + if: matrix.python-version == '3.10' + uses: codecov/codecov-action@v3 + with: + # not required for public repos, but intermittently fails otherwise + token: ${{ secrets.CODECOV_TOKEN }} + - + name: Stop containers + if: always() + run: | + docker compose --file ${GITHUB_WORKSPACE}/.docker/docker-compose.ci-test.yml logs + docker compose --file ${GITHUB_WORKSPACE}/.docker/docker-compose.ci-test.yml down + + build: + name: Build + runs-on: ubuntu-latest + permissions: + contents: read + needs: + - lint + steps: + - + uses: actions/checkout@v3 + - + name: Set up Python 3.10 + uses: actions/setup-python@v4 + with: + python-version: '3.10' + cache: 'pip' + - + name: Install Hatch + run: | + pip3 --quiet install --upgrade hatch + - + name: Build + run: | + hatch build --clean + - + uses: actions/upload-artifact@v3 + with: + name: artifacts + path: dist/* + if-no-files-found: error + retention-days: 7 + + create-release: + name: Release + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/') + permissions: + contents: write + needs: + - build + - test + steps: + - + uses: actions/checkout@v3 + - + uses: actions/download-artifact@v3 + with: + name: artifacts + path: dist + - + name: Get latest release info + id: query-release-info + uses: release-flow/keep-a-changelog-action@v2 + with: + command: query + version: ${{ github.ref_name }} + - + name: Display release info + run: | + echo "Version: ${{ steps.query-release-info.outputs.version }}" + echo "Date: ${{ steps.query-release-info.outputs.release-date }}" + echo "${{ steps.query-release-info.outputs.release-notes }}" + - + uses: ncipollo/release-action@v1 + with: + artifacts: "dist/*.tar.gz,dist/*.whl" + body: ${{ steps.query-release-info.outputs.release-notes }} + + pypi-publish: + name: Publish + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/') + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + needs: + - build + - test + steps: + - + uses: actions/download-artifact@v3 + with: + name: artifacts + path: dist + - + name: Publish build to PyPI + uses: pypa/gh-action-pypi-publish@v1.8.8 diff --git a/.gitignore b/.gitignore index 68bc17f..97a31f3 100644 --- a/.gitignore +++ b/.gitignore @@ -50,6 +50,7 @@ coverage.xml .hypothesis/ .pytest_cache/ cover/ +coverage.json # Translations *.mo @@ -158,3 +159,5 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + +tests/outputs/** diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..3680700 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,46 @@ +# This file configures pre-commit hooks. +# See https://pre-commit.com/ for general information +# See https://pre-commit.com/hooks.html for a listing of possible hooks + +repos: + # General hooks + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: check-docstring-first + - id: check-json + exclude: "tsconfig.*json" + - id: check-yaml + - id: check-toml + - id: check-executables-have-shebangs + - id: end-of-file-fixer + exclude_types: + - svg + - pofile + exclude: "(^LICENSE$)" + - id: mixed-line-ending + args: + - "--fix=lf" + - id: trailing-whitespace + exclude_types: + - svg + - id: check-case-conflict + - id: detect-private-key + - repo: https://github.com/pre-commit/mirrors-prettier + rev: 'v3.0.3' + hooks: + - id: prettier + types_or: + - javascript + - ts + - markdown + exclude: "(^Pipfile\\.lock$)" + # Python hooks + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: 'v0.0.292' + hooks: + - id: ruff + - repo: https://github.com/psf/black + rev: 23.9.1 + hooks: + - id: black diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..3b34efc --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,17 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +- Chromium conversion routes +- LibreOffice conversion routes +- PDF/A conversion route +- PDF merge route +- Health status route +- Testing and typing all setup and passing diff --git a/README.md b/README.md index a1d6e44..832da62 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,121 @@ -# gotenberg-client -A Python client for interfacing with the Gotenberg API +# Gotenberg API Client + +[![PyPI - Version](https://img.shields.io/pypi/v/gotenberg-client.svg)](https://pypi.org/project/gotenberg-client) +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/gotenberg-client.svg)](https://pypi.org/project/gotenberg-client) + +--- + +## Table of Contents + +- [Installation](#installation) +- [What](#what) +- [Why](#why) + - [Features](#features) +- [How](#how) + - [Examples](#examples) +- [License](#license) + +## Installation + +```console +pip install gotenberg-client +``` + +## What + +This is a Python client for interfacing with [Gotenberg](https://gotenberg.dev/), which in turn is a wrapper around +powerful tools for PDF generation and creation in various ways, using a stateless API. It's a very powerful tool +to generate and manipulate PDFs. + +## Why + +As far as I can tell, no active Python library exists to interface with the Gotenberg API. + +### Features + +- HTTP/2 enabled by default +- Abstract away the handling of multi-part/form-data and deal with `Path`s instead +- Based on the modern [httpx](https://github.com/encode/httpx) library +- Full support for type hinting and concrete return types as mush as possible +- Nearly full test coverage run against an actual Gotenberg server for multiple Python and PyPy versions + +## How + +All the routes and options from the Gotenberg routes are implemented, with the exception of the Prometheus metrics +endpoint. All the routes use the same format and general idea. + +1. First, you add the file or files you want to process +1. Then, configure the endpoint with its various options the route supports +1. Finally, run the route and receive your resulting file + +- Files will be PDF or ZIP, depending on what endpoint and its configuration. Endpoints which handle + multiple files, but don't merge them, return a ZIP archive of the resulting PDFs + +### Examples + +Converting a single HTML file into a PDF: + +```python +from gotenberg_client import GotenbergClient + +with GotenbergClient("http://localhost:3000") as client: + with client.chromium.html_to_pdf() as route: + response = route.index("my-index.html").run() + Path("my-index.pdf").write_bytes(response.content) +``` + +Converting an HTML file with additional resources into a PDF: + +```python +from gotenberg_client import GotenbergClient + +with GotenbergClient("http://localhost:3000") as client: + with client.chromium.html_to_pdf() as route: + response = route.index("my-index.html").resource("image.png").resource("style.css").run() + Path("my-index.pdf").write_bytes(response.content) +``` + +Converting an HTML file with additional resources into a PDF/A1a format: + +```python +from gotenberg_client import GotenbergClient +from gotenberg_client.options import PdfAFormat + +with GotenbergClient("http://localhost:3000") as client: + with client.chromium.html_to_pdf() as route: + response = route.index("my-index.html").resources(["image.png", "style.css"]).pdf_format(PdfAFormat.A1a).run() + Path("my-index.pdf").write_bytes(response.content) +``` + +Converting a URL into PDF, in landscape format + +```python +from gotenberg_client import GotenbergClient +from gotenberg_client.options import PageOrientation + +with GotenbergClient("http://localhost:3000") as client: + with client.chromium.html_to_pdf() as route: + response = route.url("https://hello.world").orient(PageOrientation.Landscape).run() + Path("my-world.pdf").write_bytes(response.content) +``` + +To ensure the proper clean up of all used resources, both the client and the route(s) should be +used as context manager. If for some reason you cannot, you should `.close` the client and any +routes: + +```python +from gotenberg_client import GotenbergClient + +try: + client = GotenbergClient("http://localhost:3000") + try: + route = client.merge(["myfile.pdf", "otherfile.pdf"]).run() + finally: + route.close() +finally: + client.close() +``` + +## License + +`gotenberg-client` is distributed under the terms of the [MPL 2.0](https://spdx.org/licenses/MPL-2.0.html) license. diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..f62dba5 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,232 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "gotenberg-client" +dynamic = ["version"] +description = 'A Python client for interfacing with the Gotenberg API' +readme = "README.md" +requires-python = ">=3.8" +license = "MPL-2.0" +keywords = [] +authors = [ + { name = "Trenton H", email = "rda0128ou@mozmail.com" }, +] +classifiers = [ + "Development Status :: 4 - Beta", + "Operating System :: OS Independent", + "Intended Audience :: Developers", + "Environment :: Web Environment", + "Programming Language :: Python", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", +] +dependencies = [ + "httpx[http2] ~= 0.24", + "typing-extensions; python_version < '3.11'" + ] + +[project.urls] +Documentation = "https://github.com/stumpylog/gotenberg-client/#readme" +Issues = "https://github.com/stumpylog/gotenberg-client/issues" +Source = "https://github.com/stumpylog/gotenberg-client/" +Changelog = "https://github.com/stumpylog/gotenberg-client/blob/main/CHANGELOG.md" + +[project.optional-dependencies] +compression = ["httpx[http2,brotli] ~= 0.24"] +magic = ["python-magic"] + +[tool.hatch.version] +path = "src/gotenberg_client/__about__.py" + +[tool.hatch.build.targets.sdist] +exclude = [ + ".github", + ".docker" +] + +[tool.hatch.envs.default] +dependencies = [ + "coverage[toml] >= 7.3", + "pytest >= 7.4", + "pytest-sugar", + "pytest-httpx ~= 0.26; python_version >= '3.9'", + "pytest-httpx ~= 0.22; python_version < '3.9'", + "pikepdf", + "python-magic", + "brotli", +] + +[tool.hatch.envs.default.scripts] +version = "python3 --version" +test = "pytest --pythonwarnings=all {args:tests}" +test-cov = "coverage run -m pytest --pythonwarnings=all {args:tests}" +cov-clear = "coverage erase" +cov-report = [ + "- coverage combine", + "coverage report", +] +cov-html = "coverage html" +cov-json = "coverage json" +cov = [ + "version", + "cov-clear", + "test-cov", + "cov-report", + "cov-json", + "cov-html" +] +pip-list = "pip list" + +[[tool.hatch.envs.all.matrix]] +python = ["3.8", "3.9", "3.10", "3.11", "3.12"] + +[tool.hatch.envs.pre-commit] +dependencies = [ + "pre-commit>=3.4.0", +] + +[tool.hatch.envs.pre-commit.scripts] +check = ["pre-commit run --all-files"] +update = ["pre-commit autoupdate"] + +[tool.hatch.envs.lint] +detached = true +dependencies = [ + "black>=23.9.1", + "mypy>=1.0.0", + "ruff>=0.0.292", + "httpx", +] + +[tool.hatch.envs.lint.scripts] +typing = [ + "mypy --version", + "mypy --install-types --non-interactive {args:src/gotenberg_client}" + ] +style = [ + "ruff {args:.}", + "black --check --diff {args:.}", +] +fmt = [ + "black {args:.}", + "ruff {args:.}", + "style", +] +all = [ + "style", + "typing", +] + +[tool.black] +target-version = ["py38"] +line-length = 120 +skip-string-normalization = true + +[tool.ruff] +fix = true +output-format = "grouped" +target-version = "py38" +line-length = 120 +extend-select = [ + "A", + "ARG", + "B", + "C", + "COM", + "DTZ", + "E", + "EM", + "EXE", + "F", + "FBT", + "I", + "ICN", + "INP", + "ISC", + "N", + "PIE", + "PTH", + "PLC", + "PLE", + "PLR", + "PLW", + "PT", + "Q", + "RSE", + "RUF", + "S", + "SIM", + "T", + "TID", + "UP", + "W", + "YTT", +] +ignore = [ + # Allow non-abstract empty methods in abstract base classes + "B027", + # Allow boolean positional values in function calls, like `dict.get(... True)` + "FBT003", + # Ignore checks for possible passwords + "S105", "S106", "S107", + # Ignore complexity + "C901", "PLR0911", "PLR0912", "PLR0913", "PLR0915", +] + +[tool.ruff.isort] +force-single-line = true +known-first-party = ["gotenberg_client"] + +[tool.ruff.flake8-tidy-imports] +ban-relative-imports = "all" + +[tool.ruff.per-file-ignores] +# Tests can use magic values, assertions, and relative imports +"tests/**/*" = ["PLR2004", "S101", "TID252"] + +[tool.coverage.run] +source_pkgs = ["gotenberg_client", "tests"] +branch = true +parallel = true +omit = [ + "src/gotenberg_client/__about__.py", + "tests/conftest.py", + "tests/utils.py", +] + +[tool.coverage.paths] +gotenberg_client = ["src/gotenberg_client", "*/gotenberg_client/src/gotenberg_client"] +tests = ["tests", "*/gotenberg_client/tests"] + +[tool.coverage.report] +exclude_lines = [ + "no cov", + "if __name__ == .__main__.:", + "if TYPE_CHECKING:", + "if SAVE_OUTPUTS:", +] + +[tool.mypy] +exclude = [ + "tests/test_convert_chromium_html.py", + "tests/test_convert_chromium_url.py", + "tests/test_convert_chromium_markdown.py", + "tests/conftest.py", + ] +disallow_any_expr = true +disallow_untyped_defs = true +disallow_incomplete_defs = true +check_untyped_defs = true +strict_optional = true + +warn_redundant_casts = true +warn_unused_ignores = true +warn_unreachable = true +warn_unused_configs = true diff --git a/src/gotenberg_client/__about__.py b/src/gotenberg_client/__about__.py new file mode 100644 index 0000000..2c0e636 --- /dev/null +++ b/src/gotenberg_client/__about__.py @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +__version__ = "0.0.1" diff --git a/src/gotenberg_client/__init__.py b/src/gotenberg_client/__init__.py new file mode 100644 index 0000000..015889f --- /dev/null +++ b/src/gotenberg_client/__init__.py @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +from gotenberg_client._client import GotenbergClient + +__all__ = ["GotenbergClient"] diff --git a/src/gotenberg_client/_base.py b/src/gotenberg_client/_base.py new file mode 100644 index 0000000..41a69e8 --- /dev/null +++ b/src/gotenberg_client/_base.py @@ -0,0 +1,122 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +import logging +from contextlib import ExitStack +from pathlib import Path +from types import TracebackType +from typing import Dict +from typing import Optional +from typing import Type + +from httpx import Client +from httpx import Response +from httpx._types import RequestFiles + +from gotenberg_client._types_compat import Self +from gotenberg_client._utils import guess_mime_type +from gotenberg_client.options import PdfAFormat + +logger = logging.getLogger(__name__) + + +class BaseRoute: + """ + The base implementation of a Gotenberg API route. Anything settings or + actions shared between all routes should be implemented here + """ + + def __init__(self, client: Client, api_route: str) -> None: + self._client = client + self._route = api_route + self._stack = ExitStack() + self._form_data: Dict[str, str] = {} + self._file_map: Dict[str, Path] = {} + + def __enter__(self) -> Self: + self.reset() + return self + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + self.reset() + + def reset(self) -> None: + """ + Calls all context manager __exit__ via the ExitStack and clears + all set files and form data options + """ + self._stack.close() + self._form_data.clear() + self._file_map.clear() + + def close(self) -> None: + """ + Alias for reset + """ + self.reset() + + def run(self) -> Response: + """ + Executes the configured route against the server and returns the resulting + Response. + TODO: It would be nice to return a simpler response to the user + """ + resp = self._client.post(url=self._route, data=self._form_data, files=self.get_files()) + resp.raise_for_status() + return resp + + def get_files(self) -> RequestFiles: + """ + Deals with opening all provided files for multi-part uploads, including + pushing their new contexts onto the stack to ensure resources like file + handles are cleaned up + """ + files = {} + for filename in self._file_map: + file_path = self._file_map[filename] + # Gotenberg requires these to have the specific name + filepath_name = filename if filename in {"index.html", "header.html", "footer.html"} else file_path.name + + # Helpful but not necessary to provide the mime type when possible + mime_type = guess_mime_type(file_path) + if mime_type is not None: + files.update( + {filepath_name: (filepath_name, self._stack.enter_context(file_path.open("rb")), mime_type)}, + ) + else: # pragma: no cover + files.update({filepath_name: (filepath_name, self._stack.enter_context(file_path.open("rb")))}) # type: ignore + return files + + def _add_file_map(self, filepath: Path, name: Optional[str] = None) -> None: + """ + Small helper to handle bookkeeping of files for later opening. The name is + optional to support those things which are required to have a certain name + """ + if name is None: + name = filepath.name + if name in self._file_map: # pragma: no cover + logger.warning(f"{name} has already been provided, overwriting anyway") + self._file_map[name] = filepath + + def pdf_format(self, pdf_format: PdfAFormat) -> "BaseRoute": + """ + All routes provide the option to configure the output PDF as a + PDF/A format + """ + self._form_data.update(pdf_format.to_form()) + return self + + +class BaseApi: + """ + Simple base class for an API, which wraps one or more routes, providing + each with the client to use + """ + + def __init__(self, client: Client) -> None: + self._client = client diff --git a/src/gotenberg_client/_client.py b/src/gotenberg_client/_client.py new file mode 100644 index 0000000..e384d29 --- /dev/null +++ b/src/gotenberg_client/_client.py @@ -0,0 +1,72 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +import logging +from importlib.util import find_spec +from types import TracebackType +from typing import Dict +from typing import Optional +from typing import Type + +from httpx import Client + +from gotenberg_client._convert.chromium import ChromiumApi +from gotenberg_client._convert.libre_office import LibreOfficeApi +from gotenberg_client._convert.pdfa import PdfAApi +from gotenberg_client._health import HealthCheckApi +from gotenberg_client._merge import MergeApi + + +class GotenbergClient: + """ + The user's primary interface to the Gotenberg instance + """ + + def __init__( + self, + *, + gotenerg_url: str, + timeout: float = 30.0, + log_level: int = logging.ERROR, + http2: bool = True, + ): + # Configure the client + self._client = Client(base_url=gotenerg_url, timeout=timeout, http2=http2) + + # Set the log level + logging.getLogger("httpx").setLevel(log_level) + logging.getLogger("httpcore").setLevel(log_level) + + # TODO Brotli? + if find_spec("brotli") is not None: + self._client.headers.update({"Accept-Encoding": "gzip,deflate,br"}) + else: + self._client.headers.update({"Accept-Encoding": "gzip,deflate"}) + + # Add the resources + self.chromium = ChromiumApi(self._client) + self.libre_office = LibreOfficeApi(self._client) + self.pdf_a = PdfAApi(self._client) + self.merge = MergeApi(self._client) + self.health = HealthCheckApi(self._client) + # TODO + + def add_headers(self, header: Dict[str, str]) -> None: # pragma: no cover + """ + Updates the httpx Client headers with the given values + """ + self._client.headers.update(header) + + def __enter__(self) -> "GotenbergClient": + return self + + def close(self) -> None: + self._client.close() + + def __exit__( + self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType], + ) -> None: + self.close() diff --git a/src/gotenberg_client/_convert/__init__.py b/src/gotenberg_client/_convert/__init__.py new file mode 100644 index 0000000..e54c6d9 --- /dev/null +++ b/src/gotenberg_client/_convert/__init__.py @@ -0,0 +1,3 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 diff --git a/src/gotenberg_client/_convert/chromium.py b/src/gotenberg_client/_convert/chromium.py new file mode 100644 index 0000000..5ffc18f --- /dev/null +++ b/src/gotenberg_client/_convert/chromium.py @@ -0,0 +1,174 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +import json +import logging +from pathlib import Path +from typing import Dict +from typing import Final +from typing import List +from typing import Union + +from gotenberg_client._base import BaseApi +from gotenberg_client._convert.common import ConvertBaseRoute +from gotenberg_client._types_compat import Self +from gotenberg_client.options import EmulatedMediaType +from gotenberg_client.options import Margin +from gotenberg_client.options import PageSize + +logger = logging.getLogger() + + +# See https://github.com/psf/requests/issues/1081#issuecomment-428504128 +class ForceMultipartDict(Dict): + def __bool__(self) -> bool: + return True + + +FORCE_MULTIPART: Final = ForceMultipartDict() + + +class ChromiumBaseRoute(ConvertBaseRoute): + """ + https://gotenberg.dev/docs/routes#convert-with-chromium + """ + + def header(self, header: Path) -> Self: + self._add_file_map(header, "header.html") + return self + + def footer(self, footer: Path) -> Self: + self._add_file_map(footer, "footer.html") + return self + + def resource(self, resource: Path) -> Self: + self._add_file_map(resource) + return self + + def resources(self, resources: List[Path]) -> Self: + for x in resources: + self.resource(x) + return self + + def size(self, size: PageSize) -> Self: + self._form_data.update(size.to_form()) + return self + + page_size = size + + def margins(self, margins: Margin) -> Self: + self._form_data.update(margins.to_form()) + return self + + def prefer_css_page_size(self) -> Self: + self._form_data.update({"preferCssPageSize": "true"}) + return self + + def prefer_set_page_size(self) -> Self: + self._form_data.update({"preferCssPageSize": "false"}) + return self + + def background_graphics(self) -> Self: + self._form_data.update({"printBackground": "true"}) + return self + + def no_background_graphics(self) -> Self: + self._form_data.update({"printBackground": "false"}) + return self + + def hide_background(self) -> Self: + self._form_data.update({"omitBackground": "true"}) + return self + + def show_background(self) -> Self: + self._form_data.update({"omitBackground": "false"}) + return self + + def scale(self, scale: Union[int, float]) -> Self: + self._form_data.update({"scale": str(scale)}) + return self + + def render_wait(self, wait: Union[int, float]) -> Self: + self._form_data.update({"waitDelay": str(wait)}) + return self + + def render_expr(self, expr: str) -> Self: + self._form_data.update({"waitForExpression": expr}) + return self + + def media_type(self, media_type: EmulatedMediaType) -> Self: + self._form_data.update(media_type.to_form()) + return self + + def user_agent(self, agent: str) -> Self: + self._form_data.update({"userAgent": agent}) + return self + + def headers(self, headers: Dict[str, str]) -> Self: + json_str = json.dumps(headers) + # TODO: Need to check this + self._form_data.update({"extraHttpHeaders": json_str}) + return self + + def fail_on_exceptions(self) -> Self: + self._form_data.update({"failOnConsoleExceptions": "true"}) + return self + + def dont_fail_on_exceptions(self) -> Self: + self._form_data.update({"failOnConsoleExceptions": "false"}) + return self + + +class _FileBasedRoute(ChromiumBaseRoute): + def index(self, index: Path) -> Self: + self._add_file_map(index, "index.html") + return self + + +class HtmlRoute(_FileBasedRoute): + """ + https://gotenberg.dev/docs/routes#html-file-into-pdf-route + """ + + +class UrlRoute(ChromiumBaseRoute): + """ + https://gotenberg.dev/docs/routes#url-into-pdf-route + """ + + def url(self, url: str) -> Self: + self._form_data["url"] = url + return self + + def get_files(self) -> ForceMultipartDict: + return FORCE_MULTIPART + + +class MarkdownRoute(_FileBasedRoute): + """ + https://gotenberg.dev/docs/routes#markdown-files-into-pdf-route + """ + + def markdown_file(self, markdown_file: Path) -> Self: + self._add_file_map(markdown_file) + return self + + def markdown_files(self, markdown_files: List[Path]) -> Self: + for x in markdown_files: + self.markdown_file(x) + return self + + +class ChromiumApi(BaseApi): + _URL_CONVERT_ENDPOINT = "/forms/chromium/convert/url" + _HTML_CONVERT_ENDPOINT = "/forms/chromium/convert/html" + _MARKDOWN_CONVERT_ENDPOINT = "/forms/chromium/convert/markdown" + + def html_to_pdf(self) -> HtmlRoute: + return HtmlRoute(self._client, self._HTML_CONVERT_ENDPOINT) + + def url_to_pdf(self) -> UrlRoute: + return UrlRoute(self._client, self._URL_CONVERT_ENDPOINT) + + def markdown_to_pdf(self) -> MarkdownRoute: + return MarkdownRoute(self._client, self._MARKDOWN_CONVERT_ENDPOINT) diff --git a/src/gotenberg_client/_convert/common.py b/src/gotenberg_client/_convert/common.py new file mode 100644 index 0000000..afb88fb --- /dev/null +++ b/src/gotenberg_client/_convert/common.py @@ -0,0 +1,31 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +import logging + +from gotenberg_client._base import BaseRoute +from gotenberg_client._types_compat import Self +from gotenberg_client.options import PageOrientation + +logger = logging.getLogger() + + +class ConvertBaseRoute(BaseRoute): + """ + All 3 convert routes provide control over orientation and page ranges + """ + + def orient(self, orient: PageOrientation) -> Self: + """ + Sets the page orientation, either Landscape or portrait + """ + self._form_data.update(orient.to_form()) + return self + + def page_ranges(self, ranges: str) -> Self: + """ + Sets the page range string, allowing either some range or just a + few pages + """ + self._form_data.update({"nativePageRanges": ranges}) + return self diff --git a/src/gotenberg_client/_convert/libre_office.py b/src/gotenberg_client/_convert/libre_office.py new file mode 100644 index 0000000..65654f8 --- /dev/null +++ b/src/gotenberg_client/_convert/libre_office.py @@ -0,0 +1,55 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +from pathlib import Path +from typing import List + +from gotenberg_client._base import BaseApi +from gotenberg_client._convert.common import ConvertBaseRoute +from gotenberg_client._types_compat import Self + + +class LibreOfficeConvertRoute(ConvertBaseRoute): + """ + https://gotenberg.dev/docs/routes#convert-with-libreoffice + """ + + def convert(self, file_path: Path) -> Self: + """ + Adds a single file to be converted to PDF. Can be called multiple times, + resulting in a ZIP of the PDFs, unless merged + """ + self._add_file_map(file_path) + return self + + def convert_files(self, file_paths: List[Path]) -> Self: + """ + Adds all provided files for conversion + """ + for x in file_paths: + self.convert(x) + return self + + def merge(self) -> Self: + """ + Merge the resulting PDFs into one + """ + self._form_data.update({"merge": "true"}) + return self + + def no_merge(self) -> Self: + """ + Don't merge the resulting PDFs + """ + self._form_data.update({"merge": "false"}) + return self + + +class LibreOfficeApi(BaseApi): + _CONVERT_ENDPOINT = "/forms/libreoffice/convert" + + def to_pdf(self) -> LibreOfficeConvertRoute: + """ + Returns the LibreOffice conversion route + """ + return LibreOfficeConvertRoute(self._client, self._CONVERT_ENDPOINT) diff --git a/src/gotenberg_client/_convert/pdfa.py b/src/gotenberg_client/_convert/pdfa.py new file mode 100644 index 0000000..d0ba3e2 --- /dev/null +++ b/src/gotenberg_client/_convert/pdfa.py @@ -0,0 +1,34 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +from pathlib import Path +from typing import List + +from gotenberg_client._base import BaseApi +from gotenberg_client._convert.common import ConvertBaseRoute +from gotenberg_client._types_compat import Self + + +class PdfAConvertRoute(ConvertBaseRoute): + """ + https://gotenberg.dev/docs/routes#convert-into-pdfa-route + """ + + def convert(self, file_path: Path) -> Self: + """ + Convert a single PDF into the provided PDF/A format + """ + self._add_file_map(file_path) + return self + + def convert_files(self, file_paths: List[Path]) -> Self: + for x in file_paths: + self.convert(x) + return self + + +class PdfAApi(BaseApi): + _CONVERT_ENDPOINT = "/forms/pdfengines/convert" + + def to_pdfa(self) -> PdfAConvertRoute: + return PdfAConvertRoute(self._client, self._CONVERT_ENDPOINT) diff --git a/src/gotenberg_client/_health.py b/src/gotenberg_client/_health.py new file mode 100644 index 0000000..3f717bc --- /dev/null +++ b/src/gotenberg_client/_health.py @@ -0,0 +1,131 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +import dataclasses +import datetime +import enum +import re +from typing import Optional +from typing import TypedDict +from typing import no_type_check + +from gotenberg_client._base import BaseApi + +_TIME_RE = re.compile( + r"(?P\d{4})-" + r"(?P\d{2})-" + r"(?P\d{2})" + r"[ tT]" + r"(?P\d{2}):" + r"(?P\d{2}):" + r"(?P\d{2})" + r"(?P\.\d+)?" + r"(?P[zZ]|[+-]\d{2}:\d{2})?", +) + + +class _ModuleStatusType(TypedDict): + status: str + timestamp: str + + +class _AllModulesType(TypedDict): + chromium: _ModuleStatusType + uno: _ModuleStatusType + + +class _HealthCheckApiResponseType(TypedDict): + status: str + details: _AllModulesType + + +@enum.unique +class StatusOptions(str, enum.Enum): + Up = "up" + Down = "down" + + +@enum.unique +class ModuleOptions(str, enum.Enum): + Chromium = "chromium" + Uno = "uno" + + +@dataclasses.dataclass +class ModuleStatus: + status: StatusOptions + timestamp: datetime.datetime + + +class HealthStatus: + """ + Decodes the JSON health response into Python types + """ + + def __init__(self, data: _HealthCheckApiResponseType) -> None: + self.data = data + self.overall = StatusOptions(data["status"]) + + self.chromium: Optional[ModuleStatus] = None + if ModuleOptions.Chromium.value in self.data["details"]: + self.chromium = self._extract_status(ModuleOptions.Chromium) + + self.uno: Optional[ModuleStatus] = None + if ModuleOptions.Uno.value in self.data["details"]: + self.uno = self._extract_status(ModuleOptions.Uno) + + def _extract_status(self, module: ModuleOptions) -> ModuleStatus: + status = StatusOptions(self.data["details"][module.value]["status"]) + + # mypy is quite wrong here, it's clearly marked as a datetime.datetime, not Any + timestamp = self._extract_datetime(self.data["details"][module.value]["timestamp"]) # type: ignore + # Also wrong here + return ModuleStatus(status, timestamp) # type: ignore + + @staticmethod + @no_type_check + def _extract_datetime(timestamp: str) -> datetime.datetime: + m = _TIME_RE.match(timestamp) + if not m: + msg = f"Unable to parse {timestamp}" + raise ValueError(msg) + + (year, month, day, hour, minute, second, frac_sec, timezone_str) = m.groups() + + microseconds = int(float(frac_sec) * 1000000.0) if frac_sec is not None else 0 + tzinfo = None + if timezone_str is not None: + if timezone_str.lower() == "z": + tzinfo = datetime.timezone.utc + else: + multi = -1 if timezone_str[0:1] == "-" else 1 + hours = int(timezone_str[1:3]) + minutes = int(timezone_str[4:]) + delta = datetime.timedelta(hours=hours, minutes=minutes) * multi + tzinfo = datetime.timezone(delta) + + return datetime.datetime( + year=int(year), + month=int(month), + day=int(day), + hour=int(hour), + minute=int(minute), + second=int(second), + microsecond=microseconds, + tzinfo=tzinfo, + ) + + +class HealthCheckApi(BaseApi): + """ + Provides the route for health checks + """ + + _HEALTH_ENDPOINT = "/health" + + def health(self) -> HealthStatus: + resp = self._client.get(self._HEALTH_ENDPOINT, headers={"Accept": "application/json"}) + resp.raise_for_status() + json_data: _HealthCheckApiResponseType = resp.json() + + return HealthStatus(json_data) diff --git a/src/gotenberg_client/_merge.py b/src/gotenberg_client/_merge.py new file mode 100644 index 0000000..52848a1 --- /dev/null +++ b/src/gotenberg_client/_merge.py @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +from pathlib import Path +from typing import List + +from gotenberg_client._base import BaseApi +from gotenberg_client._base import BaseRoute + + +class MergeRoute(BaseRoute): + """ + Handles the merging of a given set of files + """ + + def merge(self, files: List[Path]) -> "MergeRoute": + """ + Adds the given files into the file mapping. This method will maintain the + ordering of the list. Calling this method multiple times may not merge + in the expected ordering + """ + for idx, filepath in enumerate(files): + # Include index to enforce ordering + self._add_file_map(filepath, f"{idx}_{filepath.name}") + return self + + +class MergeApi(BaseApi): + """ + Wraps the merge route + """ + + _MERGE_ENDPOINT = "/forms/pdfengines/merge" + + def merge(self) -> MergeRoute: + return MergeRoute(self._client, self._MERGE_ENDPOINT) diff --git a/src/gotenberg_client/_metrics.py b/src/gotenberg_client/_metrics.py new file mode 100644 index 0000000..e54c6d9 --- /dev/null +++ b/src/gotenberg_client/_metrics.py @@ -0,0 +1,3 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 diff --git a/src/gotenberg_client/_types_compat.py b/src/gotenberg_client/_types_compat.py new file mode 100644 index 0000000..91bfbc1 --- /dev/null +++ b/src/gotenberg_client/_types_compat.py @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 + +import sys + +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self # noqa: F401 diff --git a/src/gotenberg_client/_utils.py b/src/gotenberg_client/_utils.py new file mode 100644 index 0000000..eec25ff --- /dev/null +++ b/src/gotenberg_client/_utils.py @@ -0,0 +1,42 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +from importlib.util import find_spec +from pathlib import Path +from typing import Dict +from typing import Optional +from typing import Union + + +def optional_to_form(value: Optional[Union[bool, int, float, str]], name: str) -> Dict[str, str]: + """ + Quick helper to convert an optional type into a form data field + with the given name or no changes if the value is None + """ + if value is None: + return {} + else: + return {name: str(value).lower()} + + +def guess_mime_type_stdlib(url: Path) -> Optional[str]: + """ + Uses the standard library to guess a mimetype + """ + import mimetypes + + mime_type, _ = mimetypes.guess_type(url) + return mime_type + + +def guess_mime_type_magic(url: Path) -> Optional[str]: + """ + Uses libmagic to guess the mimetype + """ + import magic # type: ignore + + return magic.from_file(url, mime=True) # type: ignore + + +# Use the best option +guess_mime_type = guess_mime_type_magic if find_spec("magic") is not None else guess_mime_type_stdlib diff --git a/src/gotenberg_client/options.py b/src/gotenberg_client/options.py new file mode 100644 index 0000000..4751de7 --- /dev/null +++ b/src/gotenberg_client/options.py @@ -0,0 +1,101 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MPL-2.0 +import dataclasses +import enum +from typing import Dict +from typing import Final +from typing import Optional +from typing import Union + +from gotenberg_client._utils import optional_to_form + + +@enum.unique +class PdfAFormat(enum.Enum): + A1a = enum.auto() + A2b = enum.auto() + A3b = enum.auto() + + def to_form(self) -> Dict[str, str]: + if self.value == PdfAFormat.A1a.value: + return {"pdfFormat": "PDF/A-1a"} + elif self.value == PdfAFormat.A2b.value: + return {"pdfFormat": "PDF/A-2b"} + elif self.value == PdfAFormat.A3b.value: + return {"pdfFormat": "PDF/A-3b"} + else: # pragma: no cover + raise NotImplementedError(self.value) + + +@enum.unique +class PageOrientation(enum.Enum): + Landscape = enum.auto() + Portrait = enum.auto() + + def to_form(self) -> Dict[str, str]: + if self.value == PageOrientation.Landscape.value: + return {"landscape": "true"} + elif self.value == PageOrientation.Portrait.value: + return {"landscape": "false"} + else: # pragma: no cover + raise NotImplementedError(self.value) + + +@dataclasses.dataclass +class PageSize: + width: Optional[Union[float, int]] = None + height: Optional[Union[float, int]] = None + + def to_form(self) -> Dict[str, str]: + data = optional_to_form(self.width, "paperWidth") + data.update(optional_to_form(self.height, "paperHeight")) + return data + + +# Define common paper sizes as shortcuts +A0: Final = PageSize(width=33.1, height=46.8) +A1: Final = PageSize(width=23.4, height=33.1) +A2: Final = PageSize(width=16.54, height=23.4) +A3: Final = PageSize(width=11.7, height=16.54) +A4: Final = PageSize(width=8.5, height=11) +A5: Final = PageSize(width=5.83, height=8.27) +A6: Final = PageSize(width=4.13, height=5.83) +Letter = A4 +Legal: Final = PageSize(width=8.5, height=14) +Tabloid: Final = PageSize(width=11, height=17) +Ledge: Final = PageSize(width=17, height=11) + + +@dataclasses.dataclass +class Margin: + top: Optional[Union[float, int]] = None + bottom: Optional[Union[float, int]] = None + left: Optional[Union[float, int]] = None + right: Optional[Union[float, int]] = None + + def to_form(self) -> Dict[str, str]: + data = optional_to_form(self.top, "marginTop") + data.update(optional_to_form(self.bottom, "marginBottom")) + data.update(optional_to_form(self.left, "marginLeft")) + data.update(optional_to_form(self.right, "marginRight")) + return data + + +Gotenberg_Default_Margins: Final = Margin(0.39, 0.39, 0.39, 0.39) +Word_Default_Margins: Final = Margin(top=1.0, bottom=1.0, left=1.0, right=1.0) +Word_Narrow_Margins: Final = Margin(top=0.5, bottom=0.5, left=0.5, right=0.5) + + +@enum.unique +class EmulatedMediaType(str, enum.Enum): + Print = enum.auto() + Screen = enum.auto() + + def to_form(self) -> Dict[str, str]: + if self.value == EmulatedMediaType.Print.value: + return {"emulatedMediaType": "print"} + elif self.value == EmulatedMediaType.Screen.value: + return {"emulatedMediaType": "screen"} + else: # pragma: no cover + raise NotImplementedError(self.value) diff --git a/src/gotenberg_client/py.typed b/src/gotenberg_client/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..be6a808 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1,3 @@ +# SPDX-FileCopyrightText: 2023-present Trenton H +# +# SPDX-License-Identifier: MIT diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..a8ff35c --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,24 @@ +import logging +import os +import shutil +from pathlib import Path +from typing import Final + +import pytest + +from gotenberg_client._client import GotenbergClient + +GOTENBERG_URL: Final[str] = os.getenv("GOTENBERG_URL", "http://localhost:3000") + +SAMPLE_DIR: Final[Path] = Path(__file__).parent.resolve() / "samples" +SAVE_DIR: Final[Path] = Path(__file__).parent.resolve() / "outputs" +SAVE_OUTPUTS: Final[bool] = "SAVE_TEST_OUTPUT" in os.environ +if SAVE_OUTPUTS: + shutil.rmtree(SAVE_DIR, ignore_errors=True) + SAVE_DIR.mkdir() + + +@pytest.fixture() +def client() -> GotenbergClient: + with GotenbergClient(gotenerg_url=GOTENBERG_URL, log_level=logging.INFO) as client: + yield client diff --git a/tests/samples/basic.html b/tests/samples/basic.html new file mode 100644 index 0000000..e9d7aed --- /dev/null +++ b/tests/samples/basic.html @@ -0,0 +1,10 @@ + + + + + My PDF + + +

Hello world!

+ + diff --git a/tests/samples/complex.html b/tests/samples/complex.html new file mode 100644 index 0000000..b93abfe --- /dev/null +++ b/tests/samples/complex.html @@ -0,0 +1,38 @@ + + + + + + + Gutenberg + + +
+
+

Gutenberg

+ +
+ +
+

It is a press, certainly, but a press from which shall flow in inexhaustible streams...Through it, God will spread His Word. A spring of truth shall flow from it: like a new star it shall scatter the darkness of ignorance, and cause a light heretofore unknown to shine amongst men.

+ +
+
+ +
+

This paragraph use the default font

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+ +

This paragraph use a Google font

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+ +

This paragraph use a local font

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
+ +
+

This image is loaded from a URL

+ +
+ + diff --git a/tests/samples/font.woff b/tests/samples/font.woff new file mode 100644 index 0000000000000000000000000000000000000000..ebd62d592e7ff4cfed3020332d996b90ff24dc8f GIT binary patch literal 12644 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 O(-;7vnZf`p2LC^-w-1v5 literal 0 HcmV?d00001 diff --git a/tests/samples/footer.html b/tests/samples/footer.html new file mode 100644 index 0000000..3bc3150 --- /dev/null +++ b/tests/samples/footer.html @@ -0,0 +1,13 @@ + + + + + +

of

+ + diff --git a/tests/samples/header.html b/tests/samples/header.html new file mode 100644 index 0000000..73bfb4b --- /dev/null +++ b/tests/samples/header.html @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/tests/samples/img.gif b/tests/samples/img.gif new file mode 100644 index 0000000000000000000000000000000000000000..6b066b53edc654a8a3037f2ed5787607a67fea4a GIT binary patch literal 29685 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

p00D}zTu$KmEJRkzASh)(@K7-9wp~2 zCKTmxDwPT@{Azt2`QKzBBdEN4bomJVrPZkmDW_d0p`8Na{{jsB{Q>#6;N;H~=X&=@ z0Q*qKM1iH9VsYIMo&JxSqk<&z~#-!R?{MY z8UqnffPkk@{u;#h?L<-oprS*Jyze_A9Aa=qhr$m)EFD|@!R<3&i-deATh(#MZN8t| z;&|MoKf3M=aa6PrjQApJ0Eo6eCE-E-9N-WS_^QBryDxDG3M=HoR-b$8~wybg3jY zuqKj73Bl?M``_uG73C&ipvI}}c5<)?4;SvUl(KhBs>S2b=nMR&L{fx4ZLH=P*=o7V zlwy}X$x~kF%PlUKWfRyFnb+LZ8SzC$CpHGz1uDO*YDG(~sqBMjD^MpjF zxWz|T;c0fv*v4C7LBATEmB~TVCcHMLO?Qmflh1(lX$yH?-Y<2})HM2+?Q1H-jwTdT zhf2+>~iPowzl1h)R*F?*x2q+Lgtc(M)4i=MGTKwE^YdrhPwWE*cvW4|EC?K6d@^cLZ z&ybQV6Ly^gkUNSK6f(l9DHC{{sRYj-#d??ncCamF^9yOo7r9(;9A!ae%;Bv zrgUXA9Qco_EsH10j5z@F_2zkABgVMyL~(Nbiz>OkYzpSJT6DZt|1fe_TEW?d*Y`t| z7Cd4K!_b7djx7#qxOJ*X*GyY{1)yXN9!rcZZwFv}x&3{^uo_cVR~CZ{tmAkAr5;cS zAW{2vka=kN9ES=QYTB-FSDwY>dH_A{ginxwGRX^-@A_SVS+G?-HyrbDrhVVwzw@|lR(1GV!eHqCEQI@)~PCPWVuVrH}euJ<0 zB9EJX9%ZE)r(1xtmOt<4-dnLbR2eyg_UTBx90j_yY9(XtrZphX>3KYM8cILzxcnhhtIH`l&jstG&J!q96U}q&L$#z|c$`c@T@A)S4x(!q zcuK4^%Z`icd~#u$2M)_xpozFIM2FoJm&STIDa}A}@2~tWB?Odo$tdpz3NSucxX9Ji zCoP%b132)y&pj0ju0U_%J*^+Wv`W`)>n_Sz&8u%$0l0ClK-(;Ks`cRd6fsBu?44%6 z7L~5QFvZmh%SU|;C7GUcERk zcP7zZ<-dHbQMw38s9X_J>kp1f+0^$C+hyv&A;p8yu7ye#(P z_ZoT^KSL<&yzk+q@HSbW9W`<#mgC8oaXsC|m|?WtE=}xt=gx=Oz!U}3g2%z#l|hrk zSo0eqb2fnuQG59}8pWEqH;>2% zRuEd!GX;`nG8JX^BqV@o)JWRIMSF)~vvoG>pRnCrUEH&aYwWV5y&CnGGx_|Fl{3zK zv%h>T`k9jJ*K*9DpXqFkH*at>)bPK_W?B!u15hRDwcQxbUybjRZ35smnVPssAXJh> zwLMldyLiutqrXb~2J^M(9Tf-syF(M?d|MGVmoy_QC^%dU0-$e}u{^fx{hOg~GOpJU zzH9qacH4MGTHh|wHi#P$0TMTiHdFX0pI_&pd^Md$%51Mn4&V080WrSH!fr_REthxa zI^Y=?JWkoz|FrsND756$!#dXhx8a&8*%mHJM}^=2N{^pM3UwKFurV&jB9(jY^K!~F z;OL?}{?sR^;kzW&eh&q3KAt`&& zg>RkrRtcqI4c%gN#%v_+LCOb&vJ6Z7!{(ds)59mjJRoMYp2?>h49cf&#x-P_X$QMg zAJsOoj}9)Q7)ooCu~2cLBN0*wh&u_-eS1L#b>m$!#nIdLJQJG|EU*22nz*1&{!)JC zTTpsPpIRkBSIEz>x}$dzp^vT7_SMaFsOls%b#%2G!cToUPrtVbQ{8X6PA-RP^KT6$ zTMqTfbZI+u=G|*A4`TKHENi|`dGv#$)}^$@v<0^og`N)MLrnrxLkmhK5mS!nBhhjU z7bB?vW?GU0(X%UOztVUb zV=Xdr-$54R-QZIq6M(vbia{@lz;JkxcuHky(*T21DE6Ugz6>Tgg{H|s0c&|rtF?zn zcYXp4%))u9eTy+ptbSy#CB3d4fQjZ;Aq^#y7r1lwE9zl7TB@azE4+#&)XnPTF)Xcb z3+AjUHgJ@+J;$-wR~s=5fMJS#9lJ1|(D+cavv0nS1F!$k=o-mXETTAko(o3-@pKq~ z_<;xm4i_~2YZc%sN=r}{8qRGbzcFT=UvVLeLDWonLq<4PB|n%%c^njMBbE1*#a@#k z*`;*pJ=u=k(-cZgHwt#t0sDuRRt(M0uHo`JF3Fm45Hp(+?n$iA3%CcXN%lzw12EM4 zKgT1$vXsy~7+jH827JOwoq=awui|G=I69(xGaaY^#)RZXLpY^|w$UW-F-g%jQn6tw zNYljk%f{yhsqF>=VLU&`V)0&SQ{}C8g`|8Bs96P-rO}63Kz@Q(`0PT37gO(W{ZC!VRLvtrn#m8lgW7FYpfei(x2m^Bo8r4xbqU^6ic~O zo1p0EeA{`h<@wr9kIcxd>0^~C{p8=AXK|#5;!WT4IJm?cey|OK>x!N-vJuW%3f06E z4do@AW+o-o&LEZE#!GV&wNypnl3~01GuyigLmFx3Q`z>UlfUq2wnib~c_i zS{>ToS~xRGWV&0jb^yE#Sd$Nhd9MWdOhl}kzyqw%n!>7*+PQ9#wVfSUozm&D)5Q@T z$}j2N5(`#0lVK(fE#pdgd1C;%=Jx%zx;>+tNeS36!ZX;nn(ssQ0$Qq!l1xlAuX7o_ z3JWuE$#-qy7CV^CNT4B9lgN;GN>-ROU91^O`pHXSrRr|Usl!FM*Ojq(@>#JN zktMfc3RAhOkIQ_y${7hw#OjgJ`}9#SM`b|9NoCZSRgTVq#1?iWGlAwxZ&YlPW}PeOd^pc@SXcyOg_g*ToaH3qdqDD9B)W!3CoWk$n|55z6)o4FfT zb(_)L#nG@rzomzP>h&wMAdQid5``(V`OKm6U+rA_#-Dcg{UNF!8(!aI~6`8-CQdI=9 zLOqU|>tw)Hu{TO6%asy^ZBsx}Uu7*)|4)^5&hPxkwk4q}Fus~0_$S%diMD0CX47-( zHb)H7F99JiHnRi)Dy=#@emit){0HTgP_!dY{~cs_a}+UOiNE0ig>#;za{Qh?aw!R! ze4E~;DfFjZ_@uVnR9Ws3Rwjk+L=BYQndZ+JT1l35rywL{vCxcu?>h%x#Wii~^PM#t zn*U-ZPKgq^pL;2~q8iO}-}@Rpm;|1U#WW>=?=LKi_pIBMAO)W*k7jat)99}XKod=j zvtRlxcMUdGUdIjJ+)HIhp0G-Jh49jllf}}SJR#G=56eqYSrqXs@(lmwVu>Vdyu)qw ziadK+-eiofTL3axbma&`d-yel`Q`Apy&>e${{a>1ff)F*%yWXN!Fl0K4TvA8K(>c| zxdX;N%Ajcs3`Wdek!|Q?sK1alMTNR#CNt*S4G-&uoUz#H-^Y*Nif+VFABRuMwq$c{ z_`r;04P#UMWTOyY24^Oat@PwYk7fmDtlo<`lxmfcv;^#$=V{&+n9P)&>d)-QSeS;i zRP}qY2&TX3N>li5LkV4RfDB<$xe!&0oy2Efqd0p%c0Yr8!Ts`|Q}UaNs!WmupD?Sg z*RfvNlmPVVcI9Ci4iXYpO8@PbS?>0C-yb`DR!FY2#&tC1RkgN2@~Ve6D}3P2#z4*K zzxuo#Ii@49x8!tr+d_)6Sg61AqZs}HE~S+Hti+aE+dqpSRhPk)`4|pHpMJkzGZu+_}u(>_D|k_ z2FNp;g}TGRGsg6F?3u^=ulxuB8n0yg#2c1jRy7{#Bp-8vwE6Ca$? zd!wqzz;MRT1CBGek8PIq!j}kslohUkWpZ%~ufQsaO-)+O<$h>6Mk6y*x$UnJjmS7fRT}!L@^R)$jIGhfhmu*ulN?0T;KB4&)N3qwZyP2N#MkYJ_%7@|6>9zf&|Y-( z_UU}M-S_EEksay!vW#|!D$IyGrrKA#?f4fei}NsGK#xz(3M0p06t1)4rxB+!8OUGU z0!_*8)_b3GplT8nb`(aPnGljD|e_Cfyu9Od1tIbSwuE1&_1$L4J}NwLvf=X$i~Ox-M8nVM^7^LQl$s{J{r z<(qrxab%z>w)dR|YL|`B)`TbvbL}qEUjj2kN)h`zXo1PvJ#Gc&?yLWLvzVW=UKnt^ zY$uZ1orfm#IzB?rWnod1lSliAvZ~y#y}4hmygZCF`;txmu3BeEU%Y<8H!6>ky!K9;q8b(jbD;|*yYM<;X(_f_43%aCjjzqb>8H?$`aB@Q+N z(qJxPy#7kJJfJ_-SmZ1hYB6zpT4ua{xha8Tb;VwY_F*KpxWi;Q

-%qte=8FS)zy{Z??EX)jmlqiI{9V1867- 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 I2?Naj58Q}%!2kdN literal 0 HcmV?d00001 diff --git a/tests/samples/markdown1.md b/tests/samples/markdown1.md new file mode 100644 index 0000000..8bad5bd --- /dev/null +++ b/tests/samples/markdown1.md @@ -0,0 +1,3 @@ +## This paragraph uses the default font and has been generated from a markdown file + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. diff --git a/tests/samples/markdown2.md b/tests/samples/markdown2.md new file mode 100644 index 0000000..bafeff0 --- /dev/null +++ b/tests/samples/markdown2.md @@ -0,0 +1,3 @@ +## This paragraph uses a local font and has been generated from a markdown file + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. diff --git a/tests/samples/markdown_index.html b/tests/samples/markdown_index.html new file mode 100644 index 0000000..ef20b74 --- /dev/null +++ b/tests/samples/markdown_index.html @@ -0,0 +1,31 @@ + + + + + + + Gutenberg + + +

+ +
+ {{ toHTML "markdown1.md" }} + +
+ {{ toHTML "markdown2.md" }} +
+ +
+ + diff --git a/tests/samples/sample.docx b/tests/samples/sample.docx new file mode 100755 index 0000000000000000000000000000000000000000..894c73c22793e893982c61afd928154000024a13 GIT binary patch literal 6191 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 literal 0 HcmV?d00001 diff --git a/tests/samples/sample.ods b/tests/samples/sample.ods new file mode 100755 index 0000000000000000000000000000000000000000..abd27608d17ea37e9543ba68cd7528eadb5e3210 GIT binary patch literal 9220 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 A$N&HU literal 0 HcmV?d00001 diff --git a/tests/samples/sample.odt b/tests/samples/sample.odt new file mode 100755 index 0000000000000000000000000000000000000000..c6133538f5810faacec42aa855c66948e4450c98 GIT binary patch literal 8339 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 literal 0 HcmV?d00001 diff --git a/tests/samples/sample.xlsx b/tests/samples/sample.xlsx new file mode 100755 index 0000000000000000000000000000000000000000..c0d96318cd17e164f702021717f9173ab50eef5d GIT binary patch literal 4801 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�*vR@PW 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%0AF<}dU#dI*5D`$OCWsZ_|vQTQ7n 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%0A6FCOd%gjUpnyH_`i+2)^I0D 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 GQU4DG17s5b literal 0 HcmV?d00001 diff --git a/tests/samples/style.css b/tests/samples/style.css new file mode 100644 index 0000000..7720f5f --- /dev/null +++ b/tests/samples/style.css @@ -0,0 +1,28 @@ +body { + font-family: Arial, Helvetica, sans-serif; +} + +.center { + text-align: center; +} + +.google-font { + font-family: 'Montserrat', sans-serif; +} + +@font-face { + font-family: 'Local'; + src: url('font.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +.local-font { + font-family: 'Local' +} + +@media print { + .page-break-after { + page-break-after: always; + } +} diff --git a/tests/test_convert_chromium_html.py b/tests/test_convert_chromium_html.py new file mode 100644 index 0000000..d9e790c --- /dev/null +++ b/tests/test_convert_chromium_html.py @@ -0,0 +1,139 @@ +import tempfile +from pathlib import Path + +import pikepdf +import pytest +from httpx import codes +from pytest_httpx import HTTPXMock + +from gotenberg_client._client import GotenbergClient +from gotenberg_client._convert.chromium import Margin +from gotenberg_client.options import A4 +from gotenberg_client.options import PageOrientation +from gotenberg_client.options import PdfAFormat +from tests.conftest import SAMPLE_DIR +from tests.conftest import SAVE_DIR +from tests.conftest import SAVE_OUTPUTS +from tests.utils import verify_stream_contains + + +class TestConvertChromiumHtmlRoute: + def test_basic_convert(self, client: GotenbergClient): + test_file = SAMPLE_DIR / "basic.html" + + with client.chromium.html_to_pdf() as route: + resp = route.index(test_file).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + if SAVE_OUTPUTS: + (SAVE_DIR / "test_basic_convert.pdf").write_bytes(resp.content) + + def test_convert_with_header_footer(self, client: GotenbergClient): + test_file = SAMPLE_DIR / "basic.html" + header_file = SAMPLE_DIR / "header.html" + footer_file = SAMPLE_DIR / "footer.html" + + with client.chromium.html_to_pdf() as route: + resp = route.index(test_file).header(header_file).footer(footer_file).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + def test_convert_additional_files(self, client: GotenbergClient): + test_file = SAMPLE_DIR / "complex.html" + img = SAMPLE_DIR / "img.gif" + font = SAMPLE_DIR / "font.woff" + style = SAMPLE_DIR / "style.css" + + with client.chromium.html_to_pdf() as route: + resp = route.index(test_file).resource(img).resource(font).resource(style).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + if SAVE_OUTPUTS: + (SAVE_DIR / "test_convert_additional_files.pdf").write_bytes(resp.content) + + @pytest.mark.parametrize( + ("gt_format", "pike_format"), + [(PdfAFormat.A1a, "1A"), (PdfAFormat.A2b, "2B"), (PdfAFormat.A3b, "3B")], + ) + def test_convert_pdfa_1a_format(self, client: GotenbergClient, gt_format: PdfAFormat, pike_format: str): + test_file = SAMPLE_DIR / "basic.html" + + with client.chromium.html_to_pdf() as route: + resp = route.index(test_file).pdf_format(gt_format).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + with tempfile.TemporaryDirectory() as temp_dir: + output = Path(temp_dir) / "test_convert_pdfa_format.pdf" + output.write_bytes(resp.content) + with pikepdf.open(output) as pdf: + meta = pdf.open_metadata() + assert meta.pdfa_status == pike_format + + +class TestConvertChromiumHtmlRouteMocked: + def test_convert_page_size(self, client: GotenbergClient, httpx_mock: HTTPXMock): + httpx_mock.add_response(method="POST") + test_file = SAMPLE_DIR / "basic.html" + + with client.chromium.html_to_pdf() as route: + _ = route.index(test_file).size(A4).run() + + request = httpx_mock.get_request() + verify_stream_contains("paperWidth", "8.5", request.stream) + verify_stream_contains("paperHeight", "11", request.stream) + + def test_convert_margin(self, client: GotenbergClient, httpx_mock: HTTPXMock): + httpx_mock.add_response(method="POST") + test_file = SAMPLE_DIR / "basic.html" + + with client.chromium.html_to_pdf() as route: + _ = route.index(test_file).margins(Margin(1, 2, 3, 4)).run() + + request = httpx_mock.get_request() + verify_stream_contains("marginTop", "1", request.stream) + verify_stream_contains("marginBottom", "2", request.stream) + verify_stream_contains("marginLeft", "3", request.stream) + verify_stream_contains("marginRight", "4", request.stream) + + def test_convert_render_control(self, client: GotenbergClient, httpx_mock: HTTPXMock): + httpx_mock.add_response(method="POST") + test_file = SAMPLE_DIR / "basic.html" + + with client.chromium.html_to_pdf() as route: + _ = route.index(test_file).render_wait(500.0).run() + + request = httpx_mock.get_request() + verify_stream_contains("waitDelay", "500.0", request.stream) + + @pytest.mark.parametrize( + ("orientation"), + [PageOrientation.Landscape, PageOrientation.Portrait], + ) + def test_convert_orientation( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + orientation: PageOrientation, + ): + httpx_mock.add_response(method="POST") + test_file = SAMPLE_DIR / "basic.html" + + with client.chromium.html_to_pdf() as route: + _ = route.index(test_file).orient(orientation).run() + + request = httpx_mock.get_request() + verify_stream_contains( + "landscape", + "true" if orientation == PageOrientation.Landscape else "false", + request.stream, + ) diff --git a/tests/test_convert_chromium_markdown.py b/tests/test_convert_chromium_markdown.py new file mode 100644 index 0000000..e300053 --- /dev/null +++ b/tests/test_convert_chromium_markdown.py @@ -0,0 +1,19 @@ +from httpx import codes + +from gotenberg_client._client import GotenbergClient +from tests.conftest import SAMPLE_DIR + + +class TestConvertChromiumUrlRoute: + def test_basic_convert(self, client: GotenbergClient): + index = SAMPLE_DIR / "markdown_index.html" + md_files = [SAMPLE_DIR / "markdown1.md", SAMPLE_DIR / "markdown2.md"] + img = SAMPLE_DIR / "img.gif" + font = SAMPLE_DIR / "font.woff" + style = SAMPLE_DIR / "style.css" + with client.chromium.markdown_to_pdf() as route: + resp = route.index(index).markdown_files(md_files).resources([img, font]).resource(style).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" diff --git a/tests/test_convert_chromium_url.py b/tests/test_convert_chromium_url.py new file mode 100644 index 0000000..5674ee6 --- /dev/null +++ b/tests/test_convert_chromium_url.py @@ -0,0 +1,241 @@ +import json + +import pytest +from httpx import codes +from pytest_httpx import HTTPXMock + +from gotenberg_client._client import GotenbergClient +from gotenberg_client._convert.chromium import EmulatedMediaType +from tests.utils import verify_stream_contains + + +class TestConvertChromiumUrlRoute: + def test_basic_convert(self, client: GotenbergClient): + with client.chromium.url_to_pdf() as route: + resp = route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders").run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + @pytest.mark.parametrize( + ("emulation"), + [EmulatedMediaType.Screen, EmulatedMediaType.Print], + ) + def test_convert_orientation( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + emulation: EmulatedMediaType, + ): + httpx_mock.add_response(method="POST") + + with client.chromium.url_to_pdf() as route: + _ = route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders").media_type(emulation).run() + + request = httpx_mock.get_request() + verify_stream_contains( + "emulatedMediaType", + "screen" if emulation == EmulatedMediaType.Screen else "print", + request.stream, + ) + + @pytest.mark.parametrize( + ("method"), + ["prefer_css_page_size", "prefer_set_page_size"], + ) + def test_convert_css_or_not_size( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + method: str, + ): + httpx_mock.add_response(method="POST") + + with client.chromium.url_to_pdf() as route: + route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders") + getattr(route, method)() + _ = route.run() + + request = httpx_mock.get_request() + verify_stream_contains( + "preferCssPageSize", + "true" if method == "prefer_css_page_size" else "false", + request.stream, + ) + + @pytest.mark.parametrize( + ("method"), + ["background_graphics", "no_background_graphics"], + ) + def test_convert_background_graphics_or_not( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + method: str, + ): + httpx_mock.add_response(method="POST") + + with client.chromium.url_to_pdf() as route: + route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders") + getattr(route, method)() + _ = route.run() + + request = httpx_mock.get_request() + verify_stream_contains( + "printBackground", + "true" if method == "background_graphics" else "false", + request.stream, + ) + + @pytest.mark.parametrize( + ("method"), + ["hide_background", "show_background"], + ) + def test_convert_hide_background_or_not( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + method: str, + ): + httpx_mock.add_response(method="POST") + + with client.chromium.url_to_pdf() as route: + route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders") + getattr(route, method)() + _ = route.run() + + request = httpx_mock.get_request() + verify_stream_contains( + "omitBackground", + "true" if method == "hide_background" else "false", + request.stream, + ) + + @pytest.mark.parametrize( + ("method"), + ["fail_on_exceptions", "dont_fail_on_exceptions"], + ) + def test_convert_fail_exceptions( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + method: str, + ): + httpx_mock.add_response(method="POST") + + with client.chromium.url_to_pdf() as route: + route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders") + getattr(route, method)() + _ = route.run() + + request = httpx_mock.get_request() + verify_stream_contains( + "failOnConsoleExceptions", + "true" if method == "fail_on_exceptions" else "false", + request.stream, + ) + + def test_convert_scale( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + ): + httpx_mock.add_response(method="POST") + + with client.chromium.url_to_pdf() as route: + _ = route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders").scale(1.5).run() + + request = httpx_mock.get_request() + verify_stream_contains( + "scale", + "1.5", + request.stream, + ) + + def test_convert_page_ranges( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + ): + httpx_mock.add_response(method="POST") + + with client.chromium.url_to_pdf() as route: + _ = route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders").page_ranges("1-5").run() + + request = httpx_mock.get_request() + verify_stream_contains( + "nativePageRanges", + "1-5", + request.stream, + ) + + def test_convert_url_render_wait( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + ): + httpx_mock.add_response(method="POST") + + with client.chromium.url_to_pdf() as route: + _ = route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders").render_wait(500).run() + + request = httpx_mock.get_request() + verify_stream_contains( + "waitDelay", + "500", + request.stream, + ) + + def test_convert_url_render_expression( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + ): + httpx_mock.add_response(method="POST") + + with client.chromium.url_to_pdf() as route: + _ = route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders").render_expr("wait while false;").run() + + request = httpx_mock.get_request() + verify_stream_contains( + "waitForExpression", + "wait while false;", + request.stream, + ) + + def test_convert_url_user_agent( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + ): + httpx_mock.add_response(method="POST") + + with client.chromium.url_to_pdf() as route: + _ = route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders").user_agent("Firefox").run() + + request = httpx_mock.get_request() + verify_stream_contains( + "userAgent", + "Firefox", + request.stream, + ) + + def test_convert_url_headers( + self, + client: GotenbergClient, + httpx_mock: HTTPXMock, + ): + httpx_mock.add_response(method="POST") + + headers = {"X-Auth-Token": "Secure"} + + with client.chromium.url_to_pdf() as route: + _ = route.url("https://en.wikipedia.org/wiki/William_Edward_Sanders").headers(headers).run() + + request = httpx_mock.get_request() + verify_stream_contains( + "extraHttpHeaders", + json.dumps(headers), + request.stream, + ) diff --git a/tests/test_convert_libre_office.py b/tests/test_convert_libre_office.py new file mode 100644 index 0000000..1933742 --- /dev/null +++ b/tests/test_convert_libre_office.py @@ -0,0 +1,127 @@ +import tempfile +from pathlib import Path +from unittest.mock import patch + +import pikepdf +import pytest +from httpx import codes + +from gotenberg_client._client import GotenbergClient +from gotenberg_client._utils import guess_mime_type_stdlib +from gotenberg_client.options import PdfAFormat +from tests.conftest import SAMPLE_DIR +from tests.conftest import SAVE_DIR +from tests.conftest import SAVE_OUTPUTS + + +class TestLibreOfficeConvert: + def test_libre_office_convert_docx_format(self, client: GotenbergClient): + test_file = SAMPLE_DIR / "sample.docx" + with client.libre_office.to_pdf() as route: + resp = route.convert(test_file).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + if SAVE_OUTPUTS: + (SAVE_DIR / "test_libre_office_convert_docx_format.pdf").write_bytes(resp.content) + + def test_libre_office_convert_odt_format(self, client: GotenbergClient): + test_file = SAMPLE_DIR / "sample.odt" + with client.libre_office.to_pdf() as route: + resp = route.convert(test_file).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + if SAVE_OUTPUTS: + (SAVE_DIR / "test_libre_office_convert_odt_format.pdf").write_bytes(resp.content) + + def test_libre_office_convert_xlsx_format(self, client: GotenbergClient): + test_file = SAMPLE_DIR / "sample.xlsx" + with client.libre_office.to_pdf() as route: + resp = route.convert(test_file).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + if SAVE_OUTPUTS: + (SAVE_DIR / "test_libre_office_convert_xlsx_format.pdf").write_bytes(resp.content) + + def test_libre_office_convert_ods_format(self, client: GotenbergClient): + test_file = SAMPLE_DIR / "sample.ods" + with client.libre_office.to_pdf() as route: + resp = route.convert(test_file).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + if SAVE_OUTPUTS: + (SAVE_DIR / "test_libre_office_convert_ods_format.pdf").write_bytes(resp.content) + + def test_libre_office_convert_multiples_format(self, client: GotenbergClient): + with client.libre_office.to_pdf() as route: + resp = route.convert_files([SAMPLE_DIR / "sample.docx", SAMPLE_DIR / "sample.odt"]).no_merge().run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/zip" + + if SAVE_OUTPUTS: + (SAVE_DIR / "test_libre_office_convert_multiples_format.zip").write_bytes(resp.content) + + def test_libre_office_convert_multiples_format_merged(self, client: GotenbergClient): + with client.libre_office.to_pdf() as route: + resp = route.convert_files([SAMPLE_DIR / "sample.docx", SAMPLE_DIR / "sample.odt"]).merge().run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + if SAVE_OUTPUTS: + (SAVE_DIR / "test_libre_office_convert_multiples_format.zip").write_bytes(resp.content) + + def test_libre_office_convert_std_lib_mime(self, client: GotenbergClient): + with patch("gotenberg_client._utils.guess_mime_type") as mocked_guess_mime_type: + mocked_guess_mime_type.side_effect = guess_mime_type_stdlib + with client.libre_office.to_pdf() as route: + resp = route.convert_files([SAMPLE_DIR / "sample.docx", SAMPLE_DIR / "sample.odt"]).no_merge().run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/zip" + + if SAVE_OUTPUTS: + (SAVE_DIR / "test_libre_office_convert_multiples_format.zip").write_bytes(resp.content) + + @pytest.mark.parametrize( + ("gt_format", "pike_format"), + [(PdfAFormat.A1a, "1A"), (PdfAFormat.A2b, "2B"), (PdfAFormat.A3b, "3B")], + ) + def test_libre_office_convert_xlsx_format_pdfa( + self, + client: GotenbergClient, + gt_format: PdfAFormat, + pike_format: str, + ): + test_file = SAMPLE_DIR / "sample.xlsx" + with client.libre_office.to_pdf() as route: + resp = route.convert(test_file).pdf_format(gt_format).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + with tempfile.TemporaryDirectory() as temp_dir: + output = Path(temp_dir) / "test_libre_office_convert_xlsx_format_pdfa.pdf" + output.write_bytes(resp.content) + with pikepdf.open(output) as pdf: + meta = pdf.open_metadata() + assert meta.pdfa_status == pike_format + + if SAVE_OUTPUTS: + (SAVE_DIR / f"test_libre_office_convert_xlsx_format_{pike_format}.pdf").write_bytes(resp.content) diff --git a/tests/test_convert_pdf_a.py b/tests/test_convert_pdf_a.py new file mode 100644 index 0000000..8b80c25 --- /dev/null +++ b/tests/test_convert_pdf_a.py @@ -0,0 +1,59 @@ +import tempfile +from pathlib import Path + +import pikepdf +import pytest +from httpx import codes + +from gotenberg_client._client import GotenbergClient +from gotenberg_client.options import PdfAFormat +from tests.conftest import SAMPLE_DIR +from tests.conftest import SAVE_DIR +from tests.conftest import SAVE_OUTPUTS + + +class TestPdfAConvert: + @pytest.mark.parametrize( + ("gt_format", "pike_format"), + [(PdfAFormat.A1a, "1A"), (PdfAFormat.A2b, "2B"), (PdfAFormat.A3b, "3B")], + ) + def test_pdf_a_single_file( + self, + client: GotenbergClient, + gt_format: PdfAFormat, + pike_format: str, + ): + test_file = SAMPLE_DIR / "sample1.pdf" + with client.pdf_a.to_pdfa() as route: + resp = route.convert(test_file).pdf_format(gt_format).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + with tempfile.TemporaryDirectory() as temp_dir: + output = Path(temp_dir) / "test_libre_office_convert_xlsx_format_pdfa.pdf" + output.write_bytes(resp.content) + with pikepdf.open(output) as pdf: + meta = pdf.open_metadata() + assert meta.pdfa_status == pike_format + + if SAVE_OUTPUTS: + (SAVE_DIR / f"test_libre_office_convert_xlsx_format_{pike_format}.pdf").write_bytes(resp.content) + + @pytest.mark.parametrize("gt_format", [PdfAFormat.A1a, PdfAFormat.A2b, PdfAFormat.A3b]) + def test_pdf_a_multiple_file( + self, + client: GotenbergClient, + gt_format: PdfAFormat, + ): + with tempfile.TemporaryDirectory() as temp_dir: + test_file = SAMPLE_DIR / "sample1.pdf" + other_test_file = Path(temp_dir) / "sample2.pdf" + other_test_file.write_bytes(test_file.read_bytes()) + with client.pdf_a.to_pdfa() as route: + resp = route.convert_files([test_file, other_test_file]).pdf_format(gt_format).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/zip" diff --git a/tests/test_health.py b/tests/test_health.py new file mode 100644 index 0000000..84f415e --- /dev/null +++ b/tests/test_health.py @@ -0,0 +1,15 @@ +from gotenberg_client._client import GotenbergClient +from gotenberg_client._health import StatusOptions + + +class TestHealthStatus: + def test_health_endpoint( + self, + client: GotenbergClient, + ): + status = client.health.health() + assert status.overall == StatusOptions.Up + assert status.chromium is not None + assert status.chromium.status == StatusOptions.Up + assert status.uno is not None + assert status.uno.status == StatusOptions.Up diff --git a/tests/test_merge.py b/tests/test_merge.py new file mode 100644 index 0000000..7ccc1f6 --- /dev/null +++ b/tests/test_merge.py @@ -0,0 +1,70 @@ +import shutil +import tempfile +from pathlib import Path +from typing import List + +import pikepdf +import pytest +from httpx import codes + +from gotenberg_client._client import GotenbergClient +from gotenberg_client.options import PdfAFormat +from tests.conftest import SAMPLE_DIR +from tests.conftest import SAVE_DIR +from tests.conftest import SAVE_OUTPUTS + + +@pytest.fixture() +def create_files(): + """ + Creates 2 files in a temporary directory and cleans them up + after their use + """ + temp_dir = Path(tempfile.mkdtemp()) + test_file = SAMPLE_DIR / "sample1.pdf" + other_test_file = temp_dir / "sample2.pdf" + other_test_file.write_bytes(test_file.read_bytes()) + yield [test_file, other_test_file] + shutil.rmtree(temp_dir, ignore_errors=True) + + +class TestMergePdfs: + @pytest.mark.parametrize( + ("gt_format", "pike_format"), + [(PdfAFormat.A1a, "1A"), (PdfAFormat.A2b, "2B"), (PdfAFormat.A3b, "3B")], + ) + def test_merge_files_pdf_a( + self, + client: GotenbergClient, + create_files: List[Path], + gt_format: PdfAFormat, + pike_format: str, + ): + with client.merge.merge() as route: + resp = route.merge(create_files).pdf_format(gt_format).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" + + with tempfile.TemporaryDirectory() as temp_dir: + output = Path(temp_dir) / "test_merge_files_pdf_a.pdf" + output.write_bytes(resp.content) + with pikepdf.open(output) as pdf: + meta = pdf.open_metadata() + assert meta.pdfa_status == pike_format + + if SAVE_OUTPUTS: + (SAVE_DIR / f"test_libre_office_convert_xlsx_format_{pike_format}.pdf").write_bytes(resp.content) + + def test_pdf_a_multiple_file( + self, + client: GotenbergClient, + create_files: List[Path], + ): + with client.merge.merge() as route: + resp = route.merge(create_files).run() + + assert resp.status_code == codes.OK + assert "Content-Type" in resp.headers + assert resp.headers["Content-Type"] == "application/pdf" diff --git a/tests/utils.py b/tests/utils.py new file mode 100644 index 0000000..021bfe3 --- /dev/null +++ b/tests/utils.py @@ -0,0 +1,15 @@ +from httpx._multipart import DataField +from httpx._multipart import FileField +from httpx._multipart import MultipartStream + + +def verify_stream_contains(key: str, value: str, stream: MultipartStream): + for item in stream.fields: + if isinstance(item, FileField): + continue + elif isinstance(item, DataField) and item.name == key: + assert item.value == value, f"Key {item.value} /= {value}" + return + + msg = f'Key "{key}" with value "{value}" not found in stream' + raise AssertionError(msg)