From 65533c1d0c631e87160801a40abceea6f944e01f Mon Sep 17 00:00:00 2001 From: Christopher Green Date: Tue, 13 Jan 2026 15:28:00 -0600 Subject: [PATCH 01/10] Add Convert to PDF - Add methods for conversion from file and conversion from url - Do argument validation based on input file format Assisted-by: Codex --- src/pdfrest/client.py | 196 +++++++++++++++++++++++++++++++ src/pdfrest/models/_internal.py | 202 ++++++++++++++++++++++++++++++++ src/pdfrest/types/__init__.py | 12 ++ src/pdfrest/types/public.py | 12 ++ 4 files changed, 422 insertions(+) diff --git a/src/pdfrest/client.py b/src/pdfrest/client.py index 8a7f1bb7..d891df64 100644 --- a/src/pdfrest/client.py +++ b/src/pdfrest/client.py @@ -76,6 +76,8 @@ BasePdfRestGraphicPayload, BmpPdfRestPayload, ConvertToMarkdownPayload, + ConvertToPdfPayload, + ConvertUrlsToPdfPayload, DeletePayload, ExtractImagesPayload, ExtractTextPayload, @@ -125,10 +127,16 @@ FlattenQuality, GifColorModel, GraphicSmoothing, + HtmlPageOrientation, + HtmlPageSize, + HtmlWebLayout, JpegColorModel, OcrLanguage, PdfAddTextObject, PdfAType, + PdfConversionCompression, + PdfConversionDownsample, + PdfConversionLocale, PdfInfoQuery, PdfMergeInput, PdfPageOrientation, @@ -3292,6 +3300,100 @@ def rasterize_pdf( timeout=timeout, ) + def convert_to_pdf( + self, + file: PdfRestFile | Sequence[PdfRestFile], + *, + output: str | None = None, + compression: PdfConversionCompression | None = None, + downsample: PdfConversionDownsample | None = None, + tagged_pdf: bool | None = None, + locale: PdfConversionLocale | None = None, + page_size: HtmlPageSize | None = None, + page_margin: str | None = None, + page_orientation: HtmlPageOrientation | None = None, + web_layout: HtmlWebLayout | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Convert a supported file type to PDF.""" + + payload: dict[str, Any] = {"files": file} + if output is not None: + payload["output"] = output + if compression is not None: + payload["compression"] = compression + if downsample is not None: + payload["downsample"] = downsample + if tagged_pdf is not None: + payload["tagged_pdf"] = tagged_pdf + if locale is not None: + payload["locale"] = locale + if page_size is not None: + payload["page_size"] = page_size + if page_margin is not None: + payload["page_margin"] = page_margin + if page_orientation is not None: + payload["page_orientation"] = page_orientation + if web_layout is not None: + payload["web_layout"] = web_layout + + return self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + + def convert_urls_to_pdf( + self, + urls: UrlInput, + *, + output: str | None = None, + compression: PdfConversionCompression | None = None, + downsample: PdfConversionDownsample | None = None, + page_size: HtmlPageSize | None = None, + page_margin: str | None = None, + page_orientation: HtmlPageOrientation | None = None, + web_layout: HtmlWebLayout | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Convert HTML content from one or more URLs to PDF.""" + + payload: dict[str, Any] = {"url": urls} + if output is not None: + payload["output"] = output + if compression is not None: + payload["compression"] = compression + if downsample is not None: + payload["downsample"] = downsample + if page_size is not None: + payload["page_size"] = page_size + if page_margin is not None: + payload["page_margin"] = page_margin + if page_orientation is not None: + payload["page_orientation"] = page_orientation + if web_layout is not None: + payload["web_layout"] = web_layout + + return self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertUrlsToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + def convert_to_pdfa( self, file: PdfRestFile | Sequence[PdfRestFile], @@ -4783,6 +4885,100 @@ async def rasterize_pdf( timeout=timeout, ) + async def convert_to_pdf( + self, + file: PdfRestFile | Sequence[PdfRestFile], + *, + output: str | None = None, + compression: PdfConversionCompression | None = None, + downsample: PdfConversionDownsample | None = None, + tagged_pdf: bool | None = None, + locale: PdfConversionLocale | None = None, + page_size: HtmlPageSize | None = None, + page_margin: str | None = None, + page_orientation: HtmlPageOrientation | None = None, + web_layout: HtmlWebLayout | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Asynchronously convert a supported file type to PDF.""" + + payload: dict[str, Any] = {"files": file} + if output is not None: + payload["output"] = output + if compression is not None: + payload["compression"] = compression + if downsample is not None: + payload["downsample"] = downsample + if tagged_pdf is not None: + payload["tagged_pdf"] = tagged_pdf + if locale is not None: + payload["locale"] = locale + if page_size is not None: + payload["page_size"] = page_size + if page_margin is not None: + payload["page_margin"] = page_margin + if page_orientation is not None: + payload["page_orientation"] = page_orientation + if web_layout is not None: + payload["web_layout"] = web_layout + + return await self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + + async def convert_urls_to_pdf( + self, + urls: UrlInput, + *, + output: str | None = None, + compression: PdfConversionCompression | None = None, + downsample: PdfConversionDownsample | None = None, + page_size: HtmlPageSize | None = None, + page_margin: str | None = None, + page_orientation: HtmlPageOrientation | None = None, + web_layout: HtmlWebLayout | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Asynchronously convert HTML content from one or more URLs to PDF.""" + + payload: dict[str, Any] = {"url": urls} + if output is not None: + payload["output"] = output + if compression is not None: + payload["compression"] = compression + if downsample is not None: + payload["downsample"] = downsample + if page_size is not None: + payload["page_size"] = page_size + if page_margin is not None: + payload["page_margin"] = page_margin + if page_orientation is not None: + payload["page_orientation"] = page_orientation + if web_layout is not None: + payload["web_layout"] = web_layout + + return await self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertUrlsToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + async def convert_to_pdfa( self, file: PdfRestFile | Sequence[PdfRestFile], diff --git a/src/pdfrest/models/_internal.py b/src/pdfrest/models/_internal.py index 2b7691b2..3025c6e7 100644 --- a/src/pdfrest/models/_internal.py +++ b/src/pdfrest/models/_internal.py @@ -23,8 +23,14 @@ from pdfrest.types.public import PdfRedactionPreset from ..types import ( + HtmlPageOrientation, + HtmlPageSize, + HtmlWebLayout, OcrLanguage, PdfAType, + PdfConversionCompression, + PdfConversionDownsample, + PdfConversionLocale, PdfInfoQuery, PdfPageOrientation, PdfPageSize, @@ -243,6 +249,19 @@ def _validate_output_language(value: str) -> str: return trimmed +_PAGE_MARGIN_PATTERN = re.compile(r"^(?:\d+(?:\.\d+)?)(?:mm|in)$") + + +def _validate_page_margin(value: str | None) -> str | None: + if value is None: + return None + trimmed = value.strip() + if not trimmed or not _PAGE_MARGIN_PATTERN.fullmatch(trimmed): + msg = "page_margin must be a number followed by 'in' or 'mm'." + raise ValueError(msg) + return trimmed + + class UploadURLs(BaseModel): url: Annotated[ list[HttpUrl] | HttpUrl, @@ -551,6 +570,189 @@ class ConvertToMarkdownPayload(BaseModel): ] = None +_PDF_SUPPORTED_MIME_TYPES: tuple[str, ...] = ( + "application/msword", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "application/vnd.ms-excel", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "application/vnd.ms-powerpoint", + "application/vnd.openxmlformats-officedocument.presentationml.presentation", + "application/postscript", + "application/eps", + "application/x-eps", + "message/rfc822", + "image/jpeg", + "image/tiff", + "image/bmp", + "image/png", + "text/html", +) + +_PDF_WORD_MIME_TYPES = { + "application/msword", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", +} +_PDF_EXCEL_MIME_TYPES = { + "application/vnd.ms-excel", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", +} +_PDF_POWERPOINT_MIME_TYPES = { + "application/vnd.ms-powerpoint", + "application/vnd.openxmlformats-officedocument.presentationml.presentation", +} +_PDF_OFFICE_MIME_TYPES = ( + _PDF_WORD_MIME_TYPES | _PDF_EXCEL_MIME_TYPES | _PDF_POWERPOINT_MIME_TYPES +) +_PDF_POSTSCRIPT_MIME_TYPES = { + "application/postscript", + "application/eps", + "application/x-eps", +} +_PDF_HTML_MIME_TYPES = {"text/html"} +_PDF_COMPRESSION_COMPATIBLE_MIME_TYPES = ( + _PDF_OFFICE_MIME_TYPES | _PDF_POSTSCRIPT_MIME_TYPES | _PDF_HTML_MIME_TYPES +) + + +class ConvertToPdfPayload(BaseModel): + """Adapt caller options into a pdfRest-ready convert-to-pdf payload.""" + + files: Annotated[ + list[PdfRestFile], + Field( + min_length=1, + max_length=1, + validation_alias=AliasChoices("file", "files"), + serialization_alias="id", + ), + BeforeValidator(_ensure_list), + AfterValidator( + _allowed_mime_types( + _PDF_SUPPORTED_MIME_TYPES[0], + *_PDF_SUPPORTED_MIME_TYPES[1:], + error_msg="Must be a supported file type for PDF conversion.", + ) + ), + PlainSerializer(_serialize_as_first_file_id), + ] + output: Annotated[ + str | None, + Field(serialization_alias="output", min_length=1, default=None), + AfterValidator(_validate_output_prefix), + ] = None + compression: Annotated[ + PdfConversionCompression | None, + Field(serialization_alias="compression", default=None), + ] = None + downsample: Annotated[ + PdfConversionDownsample | None, + Field(serialization_alias="downsample", default=None), + ] = None + tagged_pdf: Annotated[ + Literal["on", "off"] | None, + Field(serialization_alias="tagged_pdf", default=None), + BeforeValidator(_bool_to_on_off), + ] = None + locale: Annotated[ + PdfConversionLocale | None, + Field(serialization_alias="locale", default=None), + ] = None + page_size: Annotated[ + HtmlPageSize | None, + Field(serialization_alias="page_size", default=None), + ] = None + page_margin: Annotated[ + str | None, + Field(serialization_alias="page_margin", default=None), + AfterValidator(_validate_page_margin), + ] = None + page_orientation: Annotated[ + HtmlPageOrientation | None, + Field(serialization_alias="page_orientation", default=None), + ] = None + web_layout: Annotated[ + HtmlWebLayout | None, + Field(serialization_alias="web_layout", default=None), + ] = None + + @model_validator(mode="after") + def _validate_option_compatibility(self) -> ConvertToPdfPayload: + mime_type = self.files[0].type + if self.locale is not None and mime_type not in _PDF_EXCEL_MIME_TYPES: + msg = "locale is only supported for Excel inputs." + raise ValueError(msg) + + if self.tagged_pdf is not None and mime_type not in _PDF_OFFICE_MIME_TYPES: + msg = "tagged_pdf is only supported for Microsoft Office inputs." + raise ValueError(msg) + + if mime_type not in _PDF_HTML_MIME_TYPES: + if self.page_size is not None: + msg = "page_size is only supported for HTML inputs." + raise ValueError(msg) + if self.page_margin is not None: + msg = "page_margin is only supported for HTML inputs." + raise ValueError(msg) + if self.page_orientation is not None: + msg = "page_orientation is only supported for HTML inputs." + raise ValueError(msg) + if self.web_layout is not None: + msg = "web_layout is only supported for HTML inputs." + raise ValueError(msg) + + if ( + self.compression is not None or self.downsample is not None + ) and mime_type not in _PDF_COMPRESSION_COMPATIBLE_MIME_TYPES: + msg = ( + "compression and downsample are only supported for Microsoft Office, " + "PostScript, or HTML inputs." + ) + raise ValueError(msg) + + return self + + +class ConvertUrlsToPdfPayload(BaseModel): + """Adapt caller options into a pdfRest-ready convert-to-pdf payload for URLs.""" + + url: Annotated[ + list[HttpUrl], + Field(serialization_alias="url", min_length=1), + BeforeValidator(_list_of_strings), + BeforeValidator(_ensure_list), + ] + output: Annotated[ + str | None, + Field(serialization_alias="output", min_length=1, default=None), + AfterValidator(_validate_output_prefix), + ] = None + compression: Annotated[ + PdfConversionCompression | None, + Field(serialization_alias="compression", default=None), + ] = None + downsample: Annotated[ + PdfConversionDownsample | None, + Field(serialization_alias="downsample", default=None), + ] = None + page_size: Annotated[ + HtmlPageSize | None, + Field(serialization_alias="page_size", default=None), + ] = None + page_margin: Annotated[ + str | None, + Field(serialization_alias="page_margin", default=None), + AfterValidator(_validate_page_margin), + ] = None + page_orientation: Annotated[ + HtmlPageOrientation | None, + Field(serialization_alias="page_orientation", default=None), + ] = None + web_layout: Annotated[ + HtmlWebLayout | None, + Field(serialization_alias="web_layout", default=None), + ] = None + + class TranslatePdfTextPayload(BaseModel): """Adapt caller options into a pdfRest-ready translate request payload.""" diff --git a/src/pdfrest/types/__init__.py b/src/pdfrest/types/__init__.py index 474356f0..b7db11ae 100644 --- a/src/pdfrest/types/__init__.py +++ b/src/pdfrest/types/__init__.py @@ -10,11 +10,17 @@ FlattenQuality, GifColorModel, GraphicSmoothing, + HtmlPageOrientation, + HtmlPageSize, + HtmlWebLayout, JpegColorModel, OcrLanguage, PdfAddTextObject, PdfAType, PdfCmykColor, + PdfConversionCompression, + PdfConversionDownsample, + PdfConversionLocale, PdfCustomPageSize, PdfInfoQuery, PdfMergeInput, @@ -46,11 +52,17 @@ "FlattenQuality", "GifColorModel", "GraphicSmoothing", + "HtmlPageOrientation", + "HtmlPageSize", + "HtmlWebLayout", "JpegColorModel", "OcrLanguage", "PdfAType", "PdfAddTextObject", "PdfCmykColor", + "PdfConversionCompression", + "PdfConversionDownsample", + "PdfConversionLocale", "PdfCustomPageSize", "PdfInfoQuery", "PdfMergeInput", diff --git a/src/pdfrest/types/public.py b/src/pdfrest/types/public.py index 43391f21..20c73d97 100644 --- a/src/pdfrest/types/public.py +++ b/src/pdfrest/types/public.py @@ -22,11 +22,17 @@ "FlattenQuality", "GifColorModel", "GraphicSmoothing", + "HtmlPageOrientation", + "HtmlPageSize", + "HtmlWebLayout", "JpegColorModel", "OcrLanguage", "PdfAType", "PdfAddTextObject", "PdfCmykColor", + "PdfConversionCompression", + "PdfConversionDownsample", + "PdfConversionLocale", "PdfCustomPageSize", "PdfInfoQuery", "PdfMergeInput", @@ -144,6 +150,12 @@ class PdfMergeSource(TypedDict, total=False): PdfMergeInput = PdfRestFile | PdfMergeSource | tuple[PdfRestFile, PdfPageSelection] +PdfConversionCompression = Literal["lossy", "lossless"] +PdfConversionDownsample = Literal["off", 75, 150, 300, 600, 1200] +PdfConversionLocale = Literal["US", "Germany"] +HtmlPageSize = Literal["letter", "legal", "ledger", "A3", "A4", "A5"] +HtmlPageOrientation = Literal["portrait", "landscape"] +HtmlWebLayout = Literal["desktop", "tablet", "mobile"] PdfAType = Literal["PDF/A-1b", "PDF/A-2b", "PDF/A-2u", "PDF/A-3b", "PDF/A-3u"] PdfXType = Literal["PDF/X-1a", "PDF/X-3", "PDF/X-4", "PDF/X-6"] ExtractTextGranularity = Literal["off", "by_page", "document"] From f7e971267547717a6c1bb9f0aad5f2572fa8b612 Mon Sep 17 00:00:00 2001 From: Christopher Green Date: Tue, 13 Jan 2026 15:28:24 -0600 Subject: [PATCH 02/10] Add Convert to PDF tests Assisted-by: Codex --- tests/live/test_live_convert_to_pdf.py | 163 +++++++++ tests/resources/sample.html | 10 + tests/test_convert_to_pdf.py | 455 +++++++++++++++++++++++++ 3 files changed, 628 insertions(+) create mode 100644 tests/live/test_live_convert_to_pdf.py create mode 100644 tests/resources/sample.html create mode 100644 tests/test_convert_to_pdf.py diff --git a/tests/live/test_live_convert_to_pdf.py b/tests/live/test_live_convert_to_pdf.py new file mode 100644 index 00000000..ecce39a7 --- /dev/null +++ b/tests/live/test_live_convert_to_pdf.py @@ -0,0 +1,163 @@ +from __future__ import annotations + +import pytest + +from pdfrest import AsyncPdfRestClient, PdfRestApiError, PdfRestClient +from pdfrest.models import PdfRestFile + +from ..resources import get_test_resource_path + + +@pytest.fixture(scope="module") +def uploaded_docx_for_pdf( + pdfrest_api_key: str, + pdfrest_live_base_url: str, +) -> PdfRestFile: + resource = get_test_resource_path("report.docx") + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + return client.files.create_from_paths([resource])[0] + + +@pytest.fixture(scope="module") +def uploaded_html_url_for_pdf( + pdfrest_api_key: str, + pdfrest_live_base_url: str, +) -> str: + resource = get_test_resource_path("sample.html") + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + uploaded = client.files.create_from_paths([resource])[0] + return str(uploaded.url) + + +@pytest.mark.parametrize( + ("output_name", "compression", "downsample"), + [ + pytest.param(None, None, None, id="defaults"), + pytest.param("live-docx", "lossless", 600, id="customized"), + ], +) +def test_live_convert_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_docx_for_pdf: PdfRestFile, + output_name: str | None, + compression: str | None, + downsample: int | None, +) -> None: + kwargs: dict[str, object] = {} + if output_name is not None: + kwargs["output"] = output_name + if compression is not None: + kwargs["compression"] = compression + if downsample is not None: + kwargs["downsample"] = downsample + + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = client.convert_to_pdf(uploaded_docx_for_pdf, **kwargs) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) == str(uploaded_docx_for_pdf.id) + if output_name is not None: + assert output_file.name.startswith(output_name) + else: + assert output_file.name.endswith(".pdf") + + +@pytest.mark.asyncio +async def test_live_async_convert_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_docx_for_pdf: PdfRestFile, +) -> None: + async with AsyncPdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = await client.convert_to_pdf( + uploaded_docx_for_pdf, + output="async-docx", + tagged_pdf=True, + ) + + assert response.output_files + output_file = response.output_file + assert output_file.name.startswith("async-docx") + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) == str(uploaded_docx_for_pdf.id) + + +def test_live_convert_urls_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_html_url_for_pdf: str, +) -> None: + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = client.convert_urls_to_pdf( + [uploaded_html_url_for_pdf], + output="live-html", + page_size="letter", + page_margin="8mm", + page_orientation="portrait", + web_layout="desktop", + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) + assert output_file.name.startswith("live-html") + + +def test_live_convert_to_pdf_invalid_downsample( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_docx_for_pdf: PdfRestFile, +) -> None: + with ( + PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client, + pytest.raises(PdfRestApiError, match=r"(?i)downsample"), + ): + client.convert_to_pdf( + uploaded_docx_for_pdf, + extra_body={"downsample": 0}, + ) + + +@pytest.mark.asyncio +async def test_live_async_convert_urls_to_pdf_invalid_page_size( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_html_url_for_pdf: str, +) -> None: + async with AsyncPdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + with pytest.raises(PdfRestApiError, match=r"(?i)page_size|page size"): + await client.convert_urls_to_pdf( + [uploaded_html_url_for_pdf], + extra_body={"page_size": "poster"}, + ) diff --git a/tests/resources/sample.html b/tests/resources/sample.html new file mode 100644 index 00000000..ef114f96 --- /dev/null +++ b/tests/resources/sample.html @@ -0,0 +1,10 @@ + + + + pdfRest HTML Sample + + +

Hello from pdfRest

+

This is a sample HTML page used for live convert-to-pdf testing.

+ + diff --git a/tests/test_convert_to_pdf.py b/tests/test_convert_to_pdf.py new file mode 100644 index 00000000..dcac65da --- /dev/null +++ b/tests/test_convert_to_pdf.py @@ -0,0 +1,455 @@ +from __future__ import annotations + +import json + +import httpx +import pytest +from pydantic import ValidationError + +from pdfrest import AsyncPdfRestClient, PdfRestClient +from pdfrest.models import PdfRestFile, PdfRestFileBasedResponse, PdfRestFileID +from pdfrest.models._internal import ConvertToPdfPayload, ConvertUrlsToPdfPayload + +from .graphics_test_helpers import ( + ASYNC_API_KEY, + VALID_API_KEY, + build_file_info_payload, +) + + +def make_source_file(file_id: str, mime_type: str, name: str) -> PdfRestFile: + return PdfRestFile.model_validate( + { + "id": file_id, + "name": name, + "url": f"https://api.pdfrest.com/resource/{file_id}", + "type": mime_type, + "size": 512, + "modified": "2024-01-01T00:00:00Z", + "scheduledDeletionTimeUtc": None, + } + ) + + +def test_convert_to_pdf_word_success(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + PdfRestFileID.generate(1), + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "example.docx", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertToPdfPayload.model_validate( + { + "files": [input_file], + "output": "converted", + "compression": "lossless", + "downsample": 150, + "tagged_pdf": True, + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + assert request.url.params["format"] == "info" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_to_pdf( + input_file, + output="converted", + compression="lossless", + downsample=150, + tagged_pdf=True, + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "converted.pdf" + assert response.output_file.type == "application/pdf" + assert response.warning is None + assert str(response.input_id) == str(input_file.id) + + +def test_convert_to_pdf_html_options_success(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + PdfRestFileID.generate(2), + "text/html", + "example.html", + ) + output_id = str(PdfRestFileID.generate()) + + payload_dump = ConvertToPdfPayload.model_validate( + { + "files": [input_file], + "output": "html-out", + "page_size": "A4", + "page_margin": "10mm", + "page_orientation": "landscape", + "web_layout": "tablet", + "compression": "lossy", + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + "warning": "html warning", + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "html-out.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_to_pdf( + input_file, + output="html-out", + page_size="A4", + page_margin="10mm", + page_orientation="landscape", + web_layout="tablet", + compression="lossy", + ) + + assert response.output_file.name == "html-out.pdf" + assert response.output_file.type == "application/pdf" + assert response.warning == "html warning" + + +def test_convert_urls_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + urls = ["https://example.com/page"] + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertUrlsToPdfPayload.model_validate( + { + "url": urls, + "output": "url-out", + "page_size": "letter", + "page_margin": "2.5in", + "page_orientation": "portrait", + "web_layout": "desktop", + "downsample": 300, + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [PdfRestFileID.generate()], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "url-out.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_urls_to_pdf( + urls, + output="url-out", + page_size="letter", + page_margin="2.5in", + page_orientation="portrait", + web_layout="desktop", + downsample=300, + ) + + assert response.output_file.name == "url-out.pdf" + assert response.output_file.type == "application/pdf" + + +def test_convert_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + PdfRestFileID.generate(1), + "application/postscript", + "example.ps", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["compression"] == "lossy" + assert payload["downsample"] == 600 + assert payload["id"] == str(input_file.id) + assert payload["output"] == "custom" + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_to_pdf( + input_file, + output="custom", + compression="lossy", + downsample=600, + extra_query={"trace": "true"}, + extra_headers={"X-Debug": "sync"}, + extra_body={"debug": True}, + timeout=0.5, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.5) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.5) + + +def test_convert_to_pdf_validation_errors() -> None: + word_file = make_source_file( + PdfRestFileID.generate(1), + "application/msword", + "example.doc", + ) + image_file = make_source_file( + PdfRestFileID.generate(2), + "image/jpeg", + "photo.jpg", + ) + + with pytest.raises(ValidationError, match="Must be a supported file type"): + ConvertToPdfPayload.model_validate( + { + "files": [ + make_source_file( + PdfRestFileID.generate(1), + "application/pdf", + "example.pdf", + ) + ] + } + ) + + with pytest.raises( + ValidationError, match="locale is only supported for Excel inputs" + ): + ConvertToPdfPayload.model_validate({"files": [word_file], "locale": "Germany"}) + + with pytest.raises( + ValidationError, match="page_size is only supported for HTML inputs" + ): + ConvertToPdfPayload.model_validate({"files": [word_file], "page_size": "A3"}) + + with pytest.raises( + ValidationError, + match="compression and downsample are only supported", + ): + ConvertToPdfPayload.model_validate( + {"files": [image_file], "compression": "lossless"} + ) + + with pytest.raises(ValidationError, match="page_margin must be a number"): + ConvertToPdfPayload.model_validate( + {"files": [word_file], "page_margin": "bad-margin"} + ) + + with pytest.raises( + ValidationError, + match="List should have at most 1 item after validation", + ): + ConvertToPdfPayload.model_validate({"files": [word_file, image_file]}) + + +def test_convert_urls_to_pdf_validation_errors() -> None: + with pytest.raises(ValidationError, match="Input should be a valid URL"): + ConvertUrlsToPdfPayload.model_validate({"url": "not-a-url"}) + + with pytest.raises(ValidationError, match="page_margin must be a number"): + ConvertUrlsToPdfPayload.model_validate( + {"url": ["https://example.com"], "page_margin": "mm"} + ) + + +@pytest.mark.asyncio +async def test_async_convert_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + PdfRestFileID.generate(2), + "application/vnd.ms-excel", + "sheet.xls", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertToPdfPayload.model_validate( + { + "files": [input_file], + "output": "async-converted", + "locale": "US", + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_to_pdf( + input_file, output="async-converted", locale="US" + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-converted.pdf" + assert response.output_file.type == "application/pdf" + assert str(response.input_id) == str(input_file.id) + + +@pytest.mark.asyncio +async def test_async_convert_urls_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + urls = ["https://example.com/page", "https://example.com/other"] + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["url"] == urls + assert payload["output"] == "async-url" + assert payload["page_orientation"] == "portrait" + assert payload["debug"] == "yes" + return httpx.Response( + 200, + json={ + "inputId": [PdfRestFileID.generate()], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-url.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_urls_to_pdf( + urls, + output="async-url", + page_orientation="portrait", + extra_query={"trace": "async"}, + extra_headers={"X-Debug": "async"}, + extra_body={"debug": "yes"}, + timeout=0.6, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-url.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.6) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.6) From 82f948a103b5ea9cafb8cb31d15f3aa825116a85 Mon Sep 17 00:00:00 2001 From: Christopher Green Date: Fri, 13 Feb 2026 12:30:26 -0600 Subject: [PATCH 03/10] Split up `/pdf` methods - Split by input format "families" - eml - HTML - image - Office - PostScript - Leave URL input separate, as it was Assisted-by: Codex --- src/pdfrest/client.py | 274 ++++++++++- src/pdfrest/models/_internal.py | 205 +++++--- tests/convert_to_pdf_test_helpers.py | 17 + tests/live/test_live_convert_email_to_pdf.py | 86 ++++ tests/live/test_live_convert_html_to_pdf.py | 73 +++ tests/live/test_live_convert_image_to_pdf.py | 86 ++++ ....py => test_live_convert_office_to_pdf.py} | 70 +-- .../test_live_convert_postscript_to_pdf.py | 108 +++++ tests/live/test_live_convert_urls_to_pdf.py | 65 +++ tests/resources/ducky.png | Bin 0 -> 282505 bytes tests/resources/sample.eps | Bin 0 -> 640370 bytes tests/resources/test.eml | 15 + tests/test_convert_email_to_pdf.py | 212 ++++++++ tests/test_convert_html_to_pdf.py | 227 +++++++++ tests/test_convert_image_to_pdf.py | 205 ++++++++ tests/test_convert_office_to_pdf.py | 233 +++++++++ tests/test_convert_postscript_to_pdf.py | 215 +++++++++ tests/test_convert_to_pdf.py | 455 ------------------ tests/test_convert_urls_to_pdf.py | 138 ++++++ 19 files changed, 2096 insertions(+), 588 deletions(-) create mode 100644 tests/convert_to_pdf_test_helpers.py create mode 100644 tests/live/test_live_convert_email_to_pdf.py create mode 100644 tests/live/test_live_convert_html_to_pdf.py create mode 100644 tests/live/test_live_convert_image_to_pdf.py rename tests/live/{test_live_convert_to_pdf.py => test_live_convert_office_to_pdf.py} (58%) create mode 100644 tests/live/test_live_convert_postscript_to_pdf.py create mode 100644 tests/live/test_live_convert_urls_to_pdf.py create mode 100644 tests/resources/ducky.png create mode 100644 tests/resources/sample.eps create mode 100644 tests/resources/test.eml create mode 100644 tests/test_convert_email_to_pdf.py create mode 100644 tests/test_convert_html_to_pdf.py create mode 100644 tests/test_convert_image_to_pdf.py create mode 100644 tests/test_convert_office_to_pdf.py create mode 100644 tests/test_convert_postscript_to_pdf.py delete mode 100644 tests/test_convert_to_pdf.py create mode 100644 tests/test_convert_urls_to_pdf.py diff --git a/src/pdfrest/client.py b/src/pdfrest/client.py index d891df64..4c93a920 100644 --- a/src/pdfrest/client.py +++ b/src/pdfrest/client.py @@ -75,8 +75,12 @@ from .models._internal import ( BasePdfRestGraphicPayload, BmpPdfRestPayload, + ConvertEmailToPdfPayload, + ConvertHtmlToPdfPayload, + ConvertImageToPdfPayload, + ConvertOfficeToPdfPayload, + ConvertPostscriptToPdfPayload, ConvertToMarkdownPayload, - ConvertToPdfPayload, ConvertUrlsToPdfPayload, DeletePayload, ExtractImagesPayload, @@ -3300,7 +3304,7 @@ def rasterize_pdf( timeout=timeout, ) - def convert_to_pdf( + def convert_office_to_pdf( self, file: PdfRestFile | Sequence[PdfRestFile], *, @@ -3318,7 +3322,7 @@ def convert_to_pdf( extra_body: Body | None = None, timeout: TimeoutTypes | None = None, ) -> PdfRestFileBasedResponse: - """Convert a supported file type to PDF.""" + """Convert a Microsoft Office file (Word, Excel, PowerPoint) to PDF.""" payload: dict[str, Any] = {"files": file} if output is not None: @@ -3343,7 +3347,135 @@ def convert_to_pdf( return self._post_file_operation( endpoint="/pdf", payload=payload, - payload_model=ConvertToPdfPayload, + payload_model=ConvertOfficeToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + + def convert_postscript_to_pdf( + self, + file: PdfRestFile | Sequence[PdfRestFile], + *, + output: str | None = None, + compression: PdfConversionCompression | None = None, + downsample: PdfConversionDownsample | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Convert a PostScript or EPS file to PDF.""" + + payload: dict[str, Any] = {"files": file} + if output is not None: + payload["output"] = output + if compression is not None: + payload["compression"] = compression + if downsample is not None: + payload["downsample"] = downsample + + return self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertPostscriptToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + + def convert_email_to_pdf( + self, + file: PdfRestFile | Sequence[PdfRestFile], + *, + output: str | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Convert an RFC822 email file to PDF.""" + + payload: dict[str, Any] = {"files": file} + if output is not None: + payload["output"] = output + + return self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertEmailToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + + def convert_image_to_pdf( + self, + file: PdfRestFile | Sequence[PdfRestFile], + *, + output: str | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Convert a supported image file to PDF.""" + + payload: dict[str, Any] = {"files": file} + if output is not None: + payload["output"] = output + + return self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertImageToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + + def convert_html_to_pdf( + self, + file: PdfRestFile | Sequence[PdfRestFile], + *, + output: str | None = None, + compression: PdfConversionCompression | None = None, + downsample: PdfConversionDownsample | None = None, + page_size: HtmlPageSize | None = None, + page_margin: str | None = None, + page_orientation: HtmlPageOrientation | None = None, + web_layout: HtmlWebLayout | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Convert an uploaded HTML file to PDF.""" + + payload: dict[str, Any] = {"files": file} + if output is not None: + payload["output"] = output + if compression is not None: + payload["compression"] = compression + if downsample is not None: + payload["downsample"] = downsample + if page_size is not None: + payload["page_size"] = page_size + if page_margin is not None: + payload["page_margin"] = page_margin + if page_orientation is not None: + payload["page_orientation"] = page_orientation + if web_layout is not None: + payload["web_layout"] = web_layout + + return self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertHtmlToPdfPayload, extra_query=extra_query, extra_headers=extra_headers, extra_body=extra_body, @@ -4885,7 +5017,7 @@ async def rasterize_pdf( timeout=timeout, ) - async def convert_to_pdf( + async def convert_office_to_pdf( self, file: PdfRestFile | Sequence[PdfRestFile], *, @@ -4903,7 +5035,7 @@ async def convert_to_pdf( extra_body: Body | None = None, timeout: TimeoutTypes | None = None, ) -> PdfRestFileBasedResponse: - """Asynchronously convert a supported file type to PDF.""" + """Asynchronously convert a Microsoft Office file to PDF.""" payload: dict[str, Any] = {"files": file} if output is not None: @@ -4928,7 +5060,135 @@ async def convert_to_pdf( return await self._post_file_operation( endpoint="/pdf", payload=payload, - payload_model=ConvertToPdfPayload, + payload_model=ConvertOfficeToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + + async def convert_postscript_to_pdf( + self, + file: PdfRestFile | Sequence[PdfRestFile], + *, + output: str | None = None, + compression: PdfConversionCompression | None = None, + downsample: PdfConversionDownsample | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Asynchronously convert a PostScript or EPS file to PDF.""" + + payload: dict[str, Any] = {"files": file} + if output is not None: + payload["output"] = output + if compression is not None: + payload["compression"] = compression + if downsample is not None: + payload["downsample"] = downsample + + return await self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertPostscriptToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + + async def convert_email_to_pdf( + self, + file: PdfRestFile | Sequence[PdfRestFile], + *, + output: str | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Asynchronously convert an RFC822 email file to PDF.""" + + payload: dict[str, Any] = {"files": file} + if output is not None: + payload["output"] = output + + return await self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertEmailToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + + async def convert_image_to_pdf( + self, + file: PdfRestFile | Sequence[PdfRestFile], + *, + output: str | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Asynchronously convert a supported image file to PDF.""" + + payload: dict[str, Any] = {"files": file} + if output is not None: + payload["output"] = output + + return await self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertImageToPdfPayload, + extra_query=extra_query, + extra_headers=extra_headers, + extra_body=extra_body, + timeout=timeout, + ) + + async def convert_html_to_pdf( + self, + file: PdfRestFile | Sequence[PdfRestFile], + *, + output: str | None = None, + compression: PdfConversionCompression | None = None, + downsample: PdfConversionDownsample | None = None, + page_size: HtmlPageSize | None = None, + page_margin: str | None = None, + page_orientation: HtmlPageOrientation | None = None, + web_layout: HtmlWebLayout | None = None, + extra_query: Query | None = None, + extra_headers: AnyMapping | None = None, + extra_body: Body | None = None, + timeout: TimeoutTypes | None = None, + ) -> PdfRestFileBasedResponse: + """Asynchronously convert an uploaded HTML file to PDF.""" + + payload: dict[str, Any] = {"files": file} + if output is not None: + payload["output"] = output + if compression is not None: + payload["compression"] = compression + if downsample is not None: + payload["downsample"] = downsample + if page_size is not None: + payload["page_size"] = page_size + if page_margin is not None: + payload["page_margin"] = page_margin + if page_orientation is not None: + payload["page_orientation"] = page_orientation + if web_layout is not None: + payload["web_layout"] = web_layout + + return await self._post_file_operation( + endpoint="/pdf", + payload=payload, + payload_model=ConvertHtmlToPdfPayload, extra_query=extra_query, extra_headers=extra_headers, extra_body=extra_body, diff --git a/src/pdfrest/models/_internal.py b/src/pdfrest/models/_internal.py index 3025c6e7..2a249a3f 100644 --- a/src/pdfrest/models/_internal.py +++ b/src/pdfrest/models/_internal.py @@ -570,24 +570,6 @@ class ConvertToMarkdownPayload(BaseModel): ] = None -_PDF_SUPPORTED_MIME_TYPES: tuple[str, ...] = ( - "application/msword", - "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "application/vnd.ms-excel", - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "application/vnd.ms-powerpoint", - "application/vnd.openxmlformats-officedocument.presentationml.presentation", - "application/postscript", - "application/eps", - "application/x-eps", - "message/rfc822", - "image/jpeg", - "image/tiff", - "image/bmp", - "image/png", - "text/html", -) - _PDF_WORD_MIME_TYPES = { "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", @@ -608,14 +590,18 @@ class ConvertToMarkdownPayload(BaseModel): "application/eps", "application/x-eps", } +_PDF_EMAIL_MIME_TYPES = {"message/rfc822"} +_PDF_IMAGE_MIME_TYPES = { + "image/jpeg", + "image/tiff", + "image/bmp", + "image/png", +} _PDF_HTML_MIME_TYPES = {"text/html"} -_PDF_COMPRESSION_COMPATIBLE_MIME_TYPES = ( - _PDF_OFFICE_MIME_TYPES | _PDF_POSTSCRIPT_MIME_TYPES | _PDF_HTML_MIME_TYPES -) -class ConvertToPdfPayload(BaseModel): - """Adapt caller options into a pdfRest-ready convert-to-pdf payload.""" +class ConvertOfficeToPdfPayload(BaseModel): + """Adapt caller options into a pdfRest-ready office-to-pdf payload.""" files: Annotated[ list[PdfRestFile], @@ -628,9 +614,8 @@ class ConvertToPdfPayload(BaseModel): BeforeValidator(_ensure_list), AfterValidator( _allowed_mime_types( - _PDF_SUPPORTED_MIME_TYPES[0], - *_PDF_SUPPORTED_MIME_TYPES[1:], - error_msg="Must be a supported file type for PDF conversion.", + *_PDF_OFFICE_MIME_TYPES, + error_msg="Must be a Microsoft Office file.", ) ), PlainSerializer(_serialize_as_first_file_id), @@ -657,6 +642,138 @@ class ConvertToPdfPayload(BaseModel): PdfConversionLocale | None, Field(serialization_alias="locale", default=None), ] = None + + @model_validator(mode="after") + def _validate_option_compatibility(self) -> ConvertOfficeToPdfPayload: + mime_type = self.files[0].type + if self.locale is not None and mime_type not in _PDF_EXCEL_MIME_TYPES: + msg = "locale is only supported for Excel inputs." + raise ValueError(msg) + return self + + +class ConvertPostscriptToPdfPayload(BaseModel): + """Adapt caller options into a pdfRest-ready postscript-to-pdf payload.""" + + files: Annotated[ + list[PdfRestFile], + Field( + min_length=1, + max_length=1, + validation_alias=AliasChoices("file", "files"), + serialization_alias="id", + ), + BeforeValidator(_ensure_list), + AfterValidator( + _allowed_mime_types( + *_PDF_POSTSCRIPT_MIME_TYPES, + error_msg="Must be a PostScript or EPS file.", + ) + ), + PlainSerializer(_serialize_as_first_file_id), + ] + output: Annotated[ + str | None, + Field(serialization_alias="output", min_length=1, default=None), + AfterValidator(_validate_output_prefix), + ] = None + compression: Annotated[ + PdfConversionCompression | None, + Field(serialization_alias="compression", default=None), + ] = None + downsample: Annotated[ + PdfConversionDownsample | None, + Field(serialization_alias="downsample", default=None), + ] = None + + +class ConvertEmailToPdfPayload(BaseModel): + """Adapt caller options into a pdfRest-ready email-to-pdf payload.""" + + files: Annotated[ + list[PdfRestFile], + Field( + min_length=1, + max_length=1, + validation_alias=AliasChoices("file", "files"), + serialization_alias="id", + ), + BeforeValidator(_ensure_list), + AfterValidator( + _allowed_mime_types( + *_PDF_EMAIL_MIME_TYPES, + error_msg="Must be an RFC822 email file.", + ) + ), + PlainSerializer(_serialize_as_first_file_id), + ] + output: Annotated[ + str | None, + Field(serialization_alias="output", min_length=1, default=None), + AfterValidator(_validate_output_prefix), + ] = None + + +class ConvertImageToPdfPayload(BaseModel): + """Adapt caller options into a pdfRest-ready image-to-pdf payload.""" + + files: Annotated[ + list[PdfRestFile], + Field( + min_length=1, + max_length=1, + validation_alias=AliasChoices("file", "files"), + serialization_alias="id", + ), + BeforeValidator(_ensure_list), + AfterValidator( + _allowed_mime_types( + *_PDF_IMAGE_MIME_TYPES, + error_msg="Must be a supported image file type.", + ) + ), + PlainSerializer(_serialize_as_first_file_id), + ] + output: Annotated[ + str | None, + Field(serialization_alias="output", min_length=1, default=None), + AfterValidator(_validate_output_prefix), + ] = None + + +class ConvertHtmlToPdfPayload(BaseModel): + """Adapt caller options into a pdfRest-ready html-to-pdf payload.""" + + files: Annotated[ + list[PdfRestFile], + Field( + min_length=1, + max_length=1, + validation_alias=AliasChoices("file", "files"), + serialization_alias="id", + ), + BeforeValidator(_ensure_list), + AfterValidator( + _allowed_mime_types( + *_PDF_HTML_MIME_TYPES, + error_msg="Must be an HTML file.", + ) + ), + PlainSerializer(_serialize_as_first_file_id), + ] + output: Annotated[ + str | None, + Field(serialization_alias="output", min_length=1, default=None), + AfterValidator(_validate_output_prefix), + ] = None + compression: Annotated[ + PdfConversionCompression | None, + Field(serialization_alias="compression", default=None), + ] = None + downsample: Annotated[ + PdfConversionDownsample | None, + Field(serialization_alias="downsample", default=None), + ] = None page_size: Annotated[ HtmlPageSize | None, Field(serialization_alias="page_size", default=None), @@ -675,42 +792,6 @@ class ConvertToPdfPayload(BaseModel): Field(serialization_alias="web_layout", default=None), ] = None - @model_validator(mode="after") - def _validate_option_compatibility(self) -> ConvertToPdfPayload: - mime_type = self.files[0].type - if self.locale is not None and mime_type not in _PDF_EXCEL_MIME_TYPES: - msg = "locale is only supported for Excel inputs." - raise ValueError(msg) - - if self.tagged_pdf is not None and mime_type not in _PDF_OFFICE_MIME_TYPES: - msg = "tagged_pdf is only supported for Microsoft Office inputs." - raise ValueError(msg) - - if mime_type not in _PDF_HTML_MIME_TYPES: - if self.page_size is not None: - msg = "page_size is only supported for HTML inputs." - raise ValueError(msg) - if self.page_margin is not None: - msg = "page_margin is only supported for HTML inputs." - raise ValueError(msg) - if self.page_orientation is not None: - msg = "page_orientation is only supported for HTML inputs." - raise ValueError(msg) - if self.web_layout is not None: - msg = "web_layout is only supported for HTML inputs." - raise ValueError(msg) - - if ( - self.compression is not None or self.downsample is not None - ) and mime_type not in _PDF_COMPRESSION_COMPATIBLE_MIME_TYPES: - msg = ( - "compression and downsample are only supported for Microsoft Office, " - "PostScript, or HTML inputs." - ) - raise ValueError(msg) - - return self - class ConvertUrlsToPdfPayload(BaseModel): """Adapt caller options into a pdfRest-ready convert-to-pdf payload for URLs.""" diff --git a/tests/convert_to_pdf_test_helpers.py b/tests/convert_to_pdf_test_helpers.py new file mode 100644 index 00000000..86eaf32c --- /dev/null +++ b/tests/convert_to_pdf_test_helpers.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +from pdfrest.models import PdfRestFile + + +def make_source_file(file_id: str, mime_type: str, name: str) -> PdfRestFile: + return PdfRestFile.model_validate( + { + "id": file_id, + "name": name, + "url": f"https://api.pdfrest.com/resource/{file_id}", + "type": mime_type, + "size": 512, + "modified": "2024-01-01T00:00:00Z", + "scheduledDeletionTimeUtc": None, + } + ) diff --git a/tests/live/test_live_convert_email_to_pdf.py b/tests/live/test_live_convert_email_to_pdf.py new file mode 100644 index 00000000..2507aeaf --- /dev/null +++ b/tests/live/test_live_convert_email_to_pdf.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +import pytest + +from pdfrest import AsyncPdfRestClient, PdfRestApiError, PdfRestClient +from pdfrest.models import PdfRestFile + +from ..resources import get_test_resource_path + + +@pytest.fixture(scope="module") +def uploaded_email_for_pdf( + pdfrest_api_key: str, + pdfrest_live_base_url: str, +) -> PdfRestFile: + resource = get_test_resource_path("test.eml") + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + return client.files.create_from_paths([resource])[0] + + +def test_live_convert_email_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_email_for_pdf: PdfRestFile, +) -> None: + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = client.convert_email_to_pdf( + uploaded_email_for_pdf, + output="live-email", + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) == str(uploaded_email_for_pdf.id) + assert output_file.name.startswith("live-email") + + +@pytest.mark.asyncio +async def test_live_async_convert_email_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_email_for_pdf: PdfRestFile, +) -> None: + async with AsyncPdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = await client.convert_email_to_pdf( + uploaded_email_for_pdf, + output="live-email-async", + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) == str(uploaded_email_for_pdf.id) + assert output_file.name.startswith("live-email-async") + + +def test_live_convert_email_to_pdf_invalid_id_override( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_email_for_pdf: PdfRestFile, +) -> None: + with ( + PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client, + pytest.raises(PdfRestApiError, match=r"(?i)id|file|resource|not found"), + ): + client.convert_email_to_pdf( + uploaded_email_for_pdf, + extra_body={"id": "00000000-0000-0000-0000-000000000000"}, + ) diff --git a/tests/live/test_live_convert_html_to_pdf.py b/tests/live/test_live_convert_html_to_pdf.py new file mode 100644 index 00000000..3dcf4f07 --- /dev/null +++ b/tests/live/test_live_convert_html_to_pdf.py @@ -0,0 +1,73 @@ +from __future__ import annotations + +import pytest + +from pdfrest import AsyncPdfRestClient, PdfRestClient +from pdfrest.models import PdfRestFile + +from ..resources import get_test_resource_path + + +@pytest.fixture(scope="module") +def uploaded_html_for_pdf( + pdfrest_api_key: str, + pdfrest_live_base_url: str, +) -> PdfRestFile: + resource = get_test_resource_path("sample.html") + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + return client.files.create_from_paths([resource])[0] + + +def test_live_convert_html_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_html_for_pdf: PdfRestFile, +) -> None: + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = client.convert_html_to_pdf( + uploaded_html_for_pdf, + output="live-html-file", + page_size="letter", + page_margin="8mm", + page_orientation="portrait", + web_layout="desktop", + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) == str(uploaded_html_for_pdf.id) + assert output_file.name.startswith("live-html-file") + + +@pytest.mark.asyncio +async def test_live_async_convert_html_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_html_for_pdf: PdfRestFile, +) -> None: + async with AsyncPdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = await client.convert_html_to_pdf( + uploaded_html_for_pdf, + output="live-html-file-async", + page_orientation="landscape", + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) == str(uploaded_html_for_pdf.id) + assert output_file.name.startswith("live-html-file-async") diff --git a/tests/live/test_live_convert_image_to_pdf.py b/tests/live/test_live_convert_image_to_pdf.py new file mode 100644 index 00000000..9a13364b --- /dev/null +++ b/tests/live/test_live_convert_image_to_pdf.py @@ -0,0 +1,86 @@ +from __future__ import annotations + +import pytest + +from pdfrest import AsyncPdfRestClient, PdfRestApiError, PdfRestClient +from pdfrest.models import PdfRestFile + +from ..resources import get_test_resource_path + + +@pytest.fixture(scope="module") +def uploaded_image_for_pdf( + pdfrest_api_key: str, + pdfrest_live_base_url: str, +) -> PdfRestFile: + resource = get_test_resource_path("ducky.png") + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + return client.files.create_from_paths([resource])[0] + + +def test_live_convert_image_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_image_for_pdf: PdfRestFile, +) -> None: + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = client.convert_image_to_pdf( + uploaded_image_for_pdf, + output="live-image", + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) == str(uploaded_image_for_pdf.id) + assert output_file.name.startswith("live-image") + + +@pytest.mark.asyncio +async def test_live_async_convert_image_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_image_for_pdf: PdfRestFile, +) -> None: + async with AsyncPdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = await client.convert_image_to_pdf( + uploaded_image_for_pdf, + output="live-image-async", + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) == str(uploaded_image_for_pdf.id) + assert output_file.name.startswith("live-image-async") + + +def test_live_convert_image_to_pdf_invalid_id_override( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_image_for_pdf: PdfRestFile, +) -> None: + with ( + PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client, + pytest.raises(PdfRestApiError, match=r"(?i)id|file|resource|not found"), + ): + client.convert_image_to_pdf( + uploaded_image_for_pdf, + extra_body={"id": "00000000-0000-0000-0000-000000000000"}, + ) diff --git a/tests/live/test_live_convert_to_pdf.py b/tests/live/test_live_convert_office_to_pdf.py similarity index 58% rename from tests/live/test_live_convert_to_pdf.py rename to tests/live/test_live_convert_office_to_pdf.py index ecce39a7..c213a194 100644 --- a/tests/live/test_live_convert_to_pdf.py +++ b/tests/live/test_live_convert_office_to_pdf.py @@ -21,20 +21,6 @@ def uploaded_docx_for_pdf( return client.files.create_from_paths([resource])[0] -@pytest.fixture(scope="module") -def uploaded_html_url_for_pdf( - pdfrest_api_key: str, - pdfrest_live_base_url: str, -) -> str: - resource = get_test_resource_path("sample.html") - with PdfRestClient( - api_key=pdfrest_api_key, - base_url=pdfrest_live_base_url, - ) as client: - uploaded = client.files.create_from_paths([resource])[0] - return str(uploaded.url) - - @pytest.mark.parametrize( ("output_name", "compression", "downsample"), [ @@ -42,7 +28,7 @@ def uploaded_html_url_for_pdf( pytest.param("live-docx", "lossless", 600, id="customized"), ], ) -def test_live_convert_to_pdf_success( +def test_live_convert_office_to_pdf_success( pdfrest_api_key: str, pdfrest_live_base_url: str, uploaded_docx_for_pdf: PdfRestFile, @@ -62,7 +48,7 @@ def test_live_convert_to_pdf_success( api_key=pdfrest_api_key, base_url=pdfrest_live_base_url, ) as client: - response = client.convert_to_pdf(uploaded_docx_for_pdf, **kwargs) + response = client.convert_office_to_pdf(uploaded_docx_for_pdf, **kwargs) assert response.output_files output_file = response.output_file @@ -77,7 +63,7 @@ def test_live_convert_to_pdf_success( @pytest.mark.asyncio -async def test_live_async_convert_to_pdf_success( +async def test_live_async_convert_office_to_pdf_success( pdfrest_api_key: str, pdfrest_live_base_url: str, uploaded_docx_for_pdf: PdfRestFile, @@ -86,7 +72,7 @@ async def test_live_async_convert_to_pdf_success( api_key=pdfrest_api_key, base_url=pdfrest_live_base_url, ) as client: - response = await client.convert_to_pdf( + response = await client.convert_office_to_pdf( uploaded_docx_for_pdf, output="async-docx", tagged_pdf=True, @@ -101,34 +87,7 @@ async def test_live_async_convert_to_pdf_success( assert str(response.input_id) == str(uploaded_docx_for_pdf.id) -def test_live_convert_urls_to_pdf_success( - pdfrest_api_key: str, - pdfrest_live_base_url: str, - uploaded_html_url_for_pdf: str, -) -> None: - with PdfRestClient( - api_key=pdfrest_api_key, - base_url=pdfrest_live_base_url, - ) as client: - response = client.convert_urls_to_pdf( - [uploaded_html_url_for_pdf], - output="live-html", - page_size="letter", - page_margin="8mm", - page_orientation="portrait", - web_layout="desktop", - ) - - assert response.output_files - output_file = response.output_file - assert output_file.type == "application/pdf" - assert output_file.size > 0 - assert response.warning is None - assert str(response.input_id) - assert output_file.name.startswith("live-html") - - -def test_live_convert_to_pdf_invalid_downsample( +def test_live_convert_office_to_pdf_invalid_downsample( pdfrest_api_key: str, pdfrest_live_base_url: str, uploaded_docx_for_pdf: PdfRestFile, @@ -140,24 +99,7 @@ def test_live_convert_to_pdf_invalid_downsample( ) as client, pytest.raises(PdfRestApiError, match=r"(?i)downsample"), ): - client.convert_to_pdf( + client.convert_office_to_pdf( uploaded_docx_for_pdf, extra_body={"downsample": 0}, ) - - -@pytest.mark.asyncio -async def test_live_async_convert_urls_to_pdf_invalid_page_size( - pdfrest_api_key: str, - pdfrest_live_base_url: str, - uploaded_html_url_for_pdf: str, -) -> None: - async with AsyncPdfRestClient( - api_key=pdfrest_api_key, - base_url=pdfrest_live_base_url, - ) as client: - with pytest.raises(PdfRestApiError, match=r"(?i)page_size|page size"): - await client.convert_urls_to_pdf( - [uploaded_html_url_for_pdf], - extra_body={"page_size": "poster"}, - ) diff --git a/tests/live/test_live_convert_postscript_to_pdf.py b/tests/live/test_live_convert_postscript_to_pdf.py new file mode 100644 index 00000000..9b02145d --- /dev/null +++ b/tests/live/test_live_convert_postscript_to_pdf.py @@ -0,0 +1,108 @@ +from __future__ import annotations + +import pytest + +from pdfrest import AsyncPdfRestClient, PdfRestApiError, PdfRestClient +from pdfrest.models import PdfRestFile + +from ..resources import get_test_resource_path + + +@pytest.fixture(scope="module") +def uploaded_postscript_for_pdf( + pdfrest_api_key: str, + pdfrest_live_base_url: str, +) -> PdfRestFile: + resource = get_test_resource_path("sample.eps") + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + return client.files.create_from_paths([resource])[0] + + +@pytest.mark.parametrize( + ("output_name", "compression", "downsample"), + [ + pytest.param(None, None, None, id="defaults"), + pytest.param("live-postscript", "lossy", 300, id="customized"), + ], +) +def test_live_convert_postscript_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_postscript_for_pdf: PdfRestFile, + output_name: str | None, + compression: str | None, + downsample: int | None, +) -> None: + kwargs: dict[str, object] = {} + if output_name is not None: + kwargs["output"] = output_name + if compression is not None: + kwargs["compression"] = compression + if downsample is not None: + kwargs["downsample"] = downsample + + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = client.convert_postscript_to_pdf( + uploaded_postscript_for_pdf, + **kwargs, + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) == str(uploaded_postscript_for_pdf.id) + if output_name is not None: + assert output_file.name.startswith(output_name) + else: + assert output_file.name.endswith(".pdf") + + +@pytest.mark.asyncio +async def test_live_async_convert_postscript_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_postscript_for_pdf: PdfRestFile, +) -> None: + async with AsyncPdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = await client.convert_postscript_to_pdf( + uploaded_postscript_for_pdf, + output="live-postscript-async", + compression="lossless", + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) == str(uploaded_postscript_for_pdf.id) + assert output_file.name.startswith("live-postscript-async") + + +def test_live_convert_postscript_to_pdf_invalid_downsample( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_postscript_for_pdf: PdfRestFile, +) -> None: + with ( + PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client, + pytest.raises(PdfRestApiError, match=r"(?i)downsample"), + ): + client.convert_postscript_to_pdf( + uploaded_postscript_for_pdf, + extra_body={"downsample": 0}, + ) diff --git a/tests/live/test_live_convert_urls_to_pdf.py b/tests/live/test_live_convert_urls_to_pdf.py new file mode 100644 index 00000000..c6e0e716 --- /dev/null +++ b/tests/live/test_live_convert_urls_to_pdf.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +import pytest + +from pdfrest import AsyncPdfRestClient, PdfRestApiError, PdfRestClient + +from ..resources import get_test_resource_path + + +@pytest.fixture(scope="module") +def uploaded_html_url_for_pdf( + pdfrest_api_key: str, + pdfrest_live_base_url: str, +) -> str: + resource = get_test_resource_path("sample.html") + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + uploaded = client.files.create_from_paths([resource])[0] + return str(uploaded.url) + + +def test_live_convert_urls_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_html_url_for_pdf: str, +) -> None: + with PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = client.convert_urls_to_pdf( + [uploaded_html_url_for_pdf], + output="live-html-url", + page_size="letter", + page_margin="8mm", + page_orientation="portrait", + web_layout="desktop", + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) + assert output_file.name.startswith("live-html-url") + + +@pytest.mark.asyncio +async def test_live_async_convert_urls_to_pdf_invalid_page_size( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_html_url_for_pdf: str, +) -> None: + async with AsyncPdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + with pytest.raises(PdfRestApiError, match=r"(?i)page_size|page size"): + await client.convert_urls_to_pdf( + [uploaded_html_url_for_pdf], + extra_body={"page_size": "poster"}, + ) diff --git a/tests/resources/ducky.png b/tests/resources/ducky.png new file mode 100644 index 0000000000000000000000000000000000000000..5e40cc7ba11128a2b08080e2d03b3e6d2819e77f GIT binary patch literal 282505 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

4Qm_5n-DWn@juk!UwjCf4o?r~04{$Q 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⋙@NgkVc1hksk9~ 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

cJCC!a(3WbOO1pm+Na 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 literal 0 HcmV?d00001 diff --git a/tests/resources/test.eml b/tests/resources/test.eml new file mode 100644 index 00000000..35652b1e --- /dev/null +++ b/tests/resources/test.eml @@ -0,0 +1,15 @@ +From: sender@example.com +To: recipient@example.com +Subject: Test Email +Date: Fri, 7 Jun 2024 12:00:00 +0000 +Message-ID: <1234567890@example.com> +MIME-Version: 1.0 +Content-Type: text/plain; charset="UTF-8" +Content-Transfer-Encoding: 7bit + +Hello, + +This is a simple test email message sent as a sample .eml file. + +Best regards, +Sender diff --git a/tests/test_convert_email_to_pdf.py b/tests/test_convert_email_to_pdf.py new file mode 100644 index 00000000..b3d05c47 --- /dev/null +++ b/tests/test_convert_email_to_pdf.py @@ -0,0 +1,212 @@ +from __future__ import annotations + +import json + +import httpx +import pytest +from pydantic import ValidationError + +from pdfrest import AsyncPdfRestClient, PdfRestClient +from pdfrest.models import PdfRestFileBasedResponse, PdfRestFileID +from pdfrest.models._internal import ConvertEmailToPdfPayload + +from .convert_to_pdf_test_helpers import make_source_file +from .graphics_test_helpers import ASYNC_API_KEY, VALID_API_KEY, build_file_info_payload + + +def test_convert_email_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(1)), + "message/rfc822", + "example.eml", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertEmailToPdfPayload.model_validate( + { + "files": [input_file], + "output": "converted", + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + assert request.url.params["format"] == "info" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_email_to_pdf( + input_file, + output="converted", + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "converted.pdf" + assert response.output_file.type == "application/pdf" + assert response.warning is None + assert str(response.input_id) == str(input_file.id) + + +def test_convert_email_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(1)), + "message/rfc822", + "message.eml", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["id"] == str(input_file.id) + assert payload["output"] == "custom" + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_email_to_pdf( + input_file, + output="custom", + extra_query={"trace": "true"}, + extra_headers={"X-Debug": "sync"}, + extra_body={"debug": True}, + timeout=0.5, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.5) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.5) + + +def test_convert_email_to_pdf_validation_errors() -> None: + email_file = make_source_file( + str(PdfRestFileID.generate(1)), + "message/rfc822", + "message.eml", + ) + image_file = make_source_file( + str(PdfRestFileID.generate(2)), + "image/jpeg", + "photo.jpg", + ) + + with pytest.raises(ValidationError, match="Must be an RFC822 email file"): + ConvertEmailToPdfPayload.model_validate({"files": [image_file]}) + + with pytest.raises( + ValidationError, + match="List should have at most 1 item after validation", + ): + ConvertEmailToPdfPayload.model_validate({"files": [email_file, image_file]}) + + +@pytest.mark.asyncio +async def test_async_convert_email_to_pdf_success( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "message/rfc822", + "async-message.eml", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertEmailToPdfPayload.model_validate( + { + "files": [input_file], + "output": "async-converted", + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_email_to_pdf( + input_file, + output="async-converted", + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-converted.pdf" + assert response.output_file.type == "application/pdf" + assert str(response.input_id) == str(input_file.id) diff --git a/tests/test_convert_html_to_pdf.py b/tests/test_convert_html_to_pdf.py new file mode 100644 index 00000000..7a58a0ed --- /dev/null +++ b/tests/test_convert_html_to_pdf.py @@ -0,0 +1,227 @@ +from __future__ import annotations + +import json + +import httpx +import pytest +from pydantic import ValidationError + +from pdfrest import AsyncPdfRestClient, PdfRestClient +from pdfrest.models import PdfRestFileBasedResponse, PdfRestFileID +from pdfrest.models._internal import ConvertHtmlToPdfPayload + +from .convert_to_pdf_test_helpers import make_source_file +from .graphics_test_helpers import ASYNC_API_KEY, VALID_API_KEY, build_file_info_payload + + +def test_convert_html_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "text/html", + "example.html", + ) + output_id = str(PdfRestFileID.generate()) + + payload_dump = ConvertHtmlToPdfPayload.model_validate( + { + "files": [input_file], + "output": "html-out", + "page_size": "A4", + "page_margin": "10mm", + "page_orientation": "landscape", + "web_layout": "tablet", + "compression": "lossy", + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + "warning": "html warning", + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "html-out.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_html_to_pdf( + input_file, + output="html-out", + page_size="A4", + page_margin="10mm", + page_orientation="landscape", + web_layout="tablet", + compression="lossy", + ) + + assert response.output_file.name == "html-out.pdf" + assert response.output_file.type == "application/pdf" + assert response.warning == "html warning" + + +def test_convert_html_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(1)), + "text/html", + "example.html", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["downsample"] == 300 + assert payload["id"] == str(input_file.id) + assert payload["output"] == "custom" + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_html_to_pdf( + input_file, + output="custom", + downsample=300, + extra_query={"trace": "true"}, + extra_headers={"X-Debug": "sync"}, + extra_body={"debug": True}, + timeout=0.5, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.5) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.5) + + +def test_convert_html_to_pdf_validation_errors() -> None: + with pytest.raises(ValidationError, match="Must be an HTML file"): + ConvertHtmlToPdfPayload.model_validate( + { + "files": [ + make_source_file( + str(PdfRestFileID.generate(2)), + "application/msword", + "example.doc", + ) + ] + } + ) + + with pytest.raises(ValidationError, match="page_margin must be a number"): + ConvertHtmlToPdfPayload.model_validate( + { + "files": [ + make_source_file( + str(PdfRestFileID.generate()), + "text/html", + "example.html", + ) + ], + "page_margin": "bad-margin", + } + ) + + +@pytest.mark.asyncio +async def test_async_convert_html_to_pdf_success( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "text/html", + "example.html", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertHtmlToPdfPayload.model_validate( + { + "files": [input_file], + "output": "async-converted", + "page_orientation": "portrait", + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_html_to_pdf( + input_file, + output="async-converted", + page_orientation="portrait", + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-converted.pdf" + assert response.output_file.type == "application/pdf" + assert str(response.input_id) == str(input_file.id) diff --git a/tests/test_convert_image_to_pdf.py b/tests/test_convert_image_to_pdf.py new file mode 100644 index 00000000..a2883d71 --- /dev/null +++ b/tests/test_convert_image_to_pdf.py @@ -0,0 +1,205 @@ +from __future__ import annotations + +import json + +import httpx +import pytest +from pydantic import ValidationError + +from pdfrest import AsyncPdfRestClient, PdfRestClient +from pdfrest.models import PdfRestFileBasedResponse, PdfRestFileID +from pdfrest.models._internal import ConvertImageToPdfPayload + +from .convert_to_pdf_test_helpers import make_source_file +from .graphics_test_helpers import ASYNC_API_KEY, VALID_API_KEY, build_file_info_payload + + +def test_convert_image_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(1)), + "image/png", + "example.png", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertImageToPdfPayload.model_validate( + { + "files": [input_file], + "output": "converted", + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + assert request.url.params["format"] == "info" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_image_to_pdf( + input_file, + output="converted", + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "converted.pdf" + assert response.output_file.type == "application/pdf" + assert response.warning is None + assert str(response.input_id) == str(input_file.id) + + +def test_convert_image_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(1)), + "image/jpeg", + "photo.jpg", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["id"] == str(input_file.id) + assert payload["output"] == "custom" + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_image_to_pdf( + input_file, + output="custom", + extra_query={"trace": "true"}, + extra_headers={"X-Debug": "sync"}, + extra_body={"debug": True}, + timeout=0.5, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.5) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.5) + + +def test_convert_image_to_pdf_validation_errors() -> None: + with pytest.raises(ValidationError, match="Must be a supported image file type"): + ConvertImageToPdfPayload.model_validate( + { + "files": [ + make_source_file( + str(PdfRestFileID.generate(2)), + "text/html", + "example.html", + ) + ] + } + ) + + +@pytest.mark.asyncio +async def test_async_convert_image_to_pdf_success( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "image/tiff", + "scan.tiff", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertImageToPdfPayload.model_validate( + { + "files": [input_file], + "output": "async-converted", + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_image_to_pdf( + input_file, + output="async-converted", + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-converted.pdf" + assert response.output_file.type == "application/pdf" + assert str(response.input_id) == str(input_file.id) diff --git a/tests/test_convert_office_to_pdf.py b/tests/test_convert_office_to_pdf.py new file mode 100644 index 00000000..99c37936 --- /dev/null +++ b/tests/test_convert_office_to_pdf.py @@ -0,0 +1,233 @@ +from __future__ import annotations + +import json + +import httpx +import pytest +from pydantic import ValidationError + +from pdfrest import AsyncPdfRestClient, PdfRestClient +from pdfrest.models import PdfRestFileBasedResponse, PdfRestFileID +from pdfrest.models._internal import ConvertOfficeToPdfPayload + +from .convert_to_pdf_test_helpers import make_source_file +from .graphics_test_helpers import ASYNC_API_KEY, VALID_API_KEY, build_file_info_payload + + +def test_convert_office_to_pdf_word_success(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(1)), + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "example.docx", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertOfficeToPdfPayload.model_validate( + { + "files": [input_file], + "output": "converted", + "compression": "lossless", + "downsample": 150, + "tagged_pdf": True, + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + assert request.url.params["format"] == "info" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_office_to_pdf( + input_file, + output="converted", + compression="lossless", + downsample=150, + tagged_pdf=True, + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "converted.pdf" + assert response.output_file.type == "application/pdf" + assert response.warning is None + assert str(response.input_id) == str(input_file.id) + + +def test_convert_office_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(1)), + "application/vnd.ms-excel", + "example.xls", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["compression"] == "lossy" + assert payload["downsample"] == 600 + assert payload["locale"] == "US" + assert payload["id"] == str(input_file.id) + assert payload["output"] == "custom" + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_office_to_pdf( + input_file, + output="custom", + compression="lossy", + downsample=600, + locale="US", + extra_query={"trace": "true"}, + extra_headers={"X-Debug": "sync"}, + extra_body={"debug": True}, + timeout=0.5, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.5) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.5) + + +def test_convert_office_to_pdf_validation_errors() -> None: + word_file = make_source_file( + str(PdfRestFileID.generate(1)), + "application/msword", + "example.doc", + ) + image_file = make_source_file( + str(PdfRestFileID.generate(2)), + "image/jpeg", + "photo.jpg", + ) + + with pytest.raises(ValidationError, match="Must be a Microsoft Office file"): + ConvertOfficeToPdfPayload.model_validate({"files": [image_file]}) + + with pytest.raises( + ValidationError, match="locale is only supported for Excel inputs" + ): + ConvertOfficeToPdfPayload.model_validate( + {"files": [word_file], "locale": "Germany"} + ) + + with pytest.raises( + ValidationError, + match="List should have at most 1 item after validation", + ): + ConvertOfficeToPdfPayload.model_validate({"files": [word_file, image_file]}) + + +@pytest.mark.asyncio +async def test_async_convert_office_to_pdf_success( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "application/vnd.ms-excel", + "sheet.xls", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertOfficeToPdfPayload.model_validate( + { + "files": [input_file], + "output": "async-converted", + "locale": "US", + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_office_to_pdf( + input_file, + output="async-converted", + locale="US", + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-converted.pdf" + assert response.output_file.type == "application/pdf" + assert str(response.input_id) == str(input_file.id) diff --git a/tests/test_convert_postscript_to_pdf.py b/tests/test_convert_postscript_to_pdf.py new file mode 100644 index 00000000..14fe72a4 --- /dev/null +++ b/tests/test_convert_postscript_to_pdf.py @@ -0,0 +1,215 @@ +from __future__ import annotations + +import json + +import httpx +import pytest +from pydantic import ValidationError + +from pdfrest import AsyncPdfRestClient, PdfRestClient +from pdfrest.models import PdfRestFileBasedResponse, PdfRestFileID +from pdfrest.models._internal import ConvertPostscriptToPdfPayload + +from .convert_to_pdf_test_helpers import make_source_file +from .graphics_test_helpers import ASYNC_API_KEY, VALID_API_KEY, build_file_info_payload + + +def test_convert_postscript_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(1)), + "application/postscript", + "example.ps", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertPostscriptToPdfPayload.model_validate( + { + "files": [input_file], + "output": "converted", + "compression": "lossless", + "downsample": 150, + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + assert request.url.params["format"] == "info" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_postscript_to_pdf( + input_file, + output="converted", + compression="lossless", + downsample=150, + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "converted.pdf" + assert response.output_file.type == "application/pdf" + assert response.warning is None + assert str(response.input_id) == str(input_file.id) + + +def test_convert_postscript_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(1)), + "application/eps", + "example.eps", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["compression"] == "lossy" + assert payload["downsample"] == 600 + assert payload["id"] == str(input_file.id) + assert payload["output"] == "custom" + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "true" + assert request.headers["X-Debug"] == "sync" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_postscript_to_pdf( + input_file, + output="custom", + compression="lossy", + downsample=600, + extra_query={"trace": "true"}, + extra_headers={"X-Debug": "sync"}, + extra_body={"debug": True}, + timeout=0.5, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.5) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.5) + + +def test_convert_postscript_to_pdf_validation_errors() -> None: + with pytest.raises(ValidationError, match="Must be a PostScript or EPS file"): + ConvertPostscriptToPdfPayload.model_validate( + { + "files": [ + make_source_file( + str(PdfRestFileID.generate(2)), + "message/rfc822", + "message.eml", + ) + ] + } + ) + + +@pytest.mark.asyncio +async def test_async_convert_postscript_to_pdf_success( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "application/x-eps", + "graphic.eps", + ) + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertPostscriptToPdfPayload.model_validate( + { + "files": [input_file], + "output": "async-converted", + "compression": "lossless", + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + seen: dict[str, int] = {"post": 0, "get": 0} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + seen["post"] += 1 + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + seen["get"] += 1 + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-converted.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_postscript_to_pdf( + input_file, + output="async-converted", + compression="lossless", + ) + + assert seen == {"post": 1, "get": 1} + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-converted.pdf" + assert response.output_file.type == "application/pdf" + assert str(response.input_id) == str(input_file.id) diff --git a/tests/test_convert_to_pdf.py b/tests/test_convert_to_pdf.py deleted file mode 100644 index dcac65da..00000000 --- a/tests/test_convert_to_pdf.py +++ /dev/null @@ -1,455 +0,0 @@ -from __future__ import annotations - -import json - -import httpx -import pytest -from pydantic import ValidationError - -from pdfrest import AsyncPdfRestClient, PdfRestClient -from pdfrest.models import PdfRestFile, PdfRestFileBasedResponse, PdfRestFileID -from pdfrest.models._internal import ConvertToPdfPayload, ConvertUrlsToPdfPayload - -from .graphics_test_helpers import ( - ASYNC_API_KEY, - VALID_API_KEY, - build_file_info_payload, -) - - -def make_source_file(file_id: str, mime_type: str, name: str) -> PdfRestFile: - return PdfRestFile.model_validate( - { - "id": file_id, - "name": name, - "url": f"https://api.pdfrest.com/resource/{file_id}", - "type": mime_type, - "size": 512, - "modified": "2024-01-01T00:00:00Z", - "scheduledDeletionTimeUtc": None, - } - ) - - -def test_convert_to_pdf_word_success(monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.delenv("PDFREST_API_KEY", raising=False) - input_file = make_source_file( - PdfRestFileID.generate(1), - "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "example.docx", - ) - output_id = str(PdfRestFileID.generate()) - payload_dump = ConvertToPdfPayload.model_validate( - { - "files": [input_file], - "output": "converted", - "compression": "lossless", - "downsample": 150, - "tagged_pdf": True, - } - ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) - - seen: dict[str, int] = {"post": 0, "get": 0} - - def handler(request: httpx.Request) -> httpx.Response: - if request.method == "POST" and request.url.path == "/pdf": - seen["post"] += 1 - payload = json.loads(request.content.decode("utf-8")) - assert payload == payload_dump - return httpx.Response( - 200, - json={ - "inputId": [input_file.id], - "outputId": [output_id], - }, - ) - if request.method == "GET" and request.url.path == f"/resource/{output_id}": - seen["get"] += 1 - assert request.url.params["format"] == "info" - return httpx.Response( - 200, - json=build_file_info_payload( - output_id, "converted.pdf", "application/pdf" - ), - ) - msg = f"Unexpected request {request.method} {request.url}" - raise AssertionError(msg) - - transport = httpx.MockTransport(handler) - with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: - response = client.convert_to_pdf( - input_file, - output="converted", - compression="lossless", - downsample=150, - tagged_pdf=True, - ) - - assert seen == {"post": 1, "get": 1} - assert isinstance(response, PdfRestFileBasedResponse) - assert response.output_file.name == "converted.pdf" - assert response.output_file.type == "application/pdf" - assert response.warning is None - assert str(response.input_id) == str(input_file.id) - - -def test_convert_to_pdf_html_options_success(monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.delenv("PDFREST_API_KEY", raising=False) - input_file = make_source_file( - PdfRestFileID.generate(2), - "text/html", - "example.html", - ) - output_id = str(PdfRestFileID.generate()) - - payload_dump = ConvertToPdfPayload.model_validate( - { - "files": [input_file], - "output": "html-out", - "page_size": "A4", - "page_margin": "10mm", - "page_orientation": "landscape", - "web_layout": "tablet", - "compression": "lossy", - } - ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) - - def handler(request: httpx.Request) -> httpx.Response: - if request.method == "POST" and request.url.path == "/pdf": - payload = json.loads(request.content.decode("utf-8")) - assert payload == payload_dump - return httpx.Response( - 200, - json={ - "inputId": [input_file.id], - "outputId": [output_id], - "warning": "html warning", - }, - ) - if request.method == "GET" and request.url.path == f"/resource/{output_id}": - return httpx.Response( - 200, - json=build_file_info_payload( - output_id, "html-out.pdf", "application/pdf" - ), - ) - msg = f"Unexpected request {request.method} {request.url}" - raise AssertionError(msg) - - transport = httpx.MockTransport(handler) - with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: - response = client.convert_to_pdf( - input_file, - output="html-out", - page_size="A4", - page_margin="10mm", - page_orientation="landscape", - web_layout="tablet", - compression="lossy", - ) - - assert response.output_file.name == "html-out.pdf" - assert response.output_file.type == "application/pdf" - assert response.warning == "html warning" - - -def test_convert_urls_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.delenv("PDFREST_API_KEY", raising=False) - urls = ["https://example.com/page"] - output_id = str(PdfRestFileID.generate()) - payload_dump = ConvertUrlsToPdfPayload.model_validate( - { - "url": urls, - "output": "url-out", - "page_size": "letter", - "page_margin": "2.5in", - "page_orientation": "portrait", - "web_layout": "desktop", - "downsample": 300, - } - ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) - - def handler(request: httpx.Request) -> httpx.Response: - if request.method == "POST" and request.url.path == "/pdf": - payload = json.loads(request.content.decode("utf-8")) - assert payload == payload_dump - return httpx.Response( - 200, - json={ - "inputId": [PdfRestFileID.generate()], - "outputId": [output_id], - }, - ) - if request.method == "GET" and request.url.path == f"/resource/{output_id}": - return httpx.Response( - 200, - json=build_file_info_payload( - output_id, "url-out.pdf", "application/pdf" - ), - ) - msg = f"Unexpected request {request.method} {request.url}" - raise AssertionError(msg) - - transport = httpx.MockTransport(handler) - with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: - response = client.convert_urls_to_pdf( - urls, - output="url-out", - page_size="letter", - page_margin="2.5in", - page_orientation="portrait", - web_layout="desktop", - downsample=300, - ) - - assert response.output_file.name == "url-out.pdf" - assert response.output_file.type == "application/pdf" - - -def test_convert_to_pdf_request_customization( - monkeypatch: pytest.MonkeyPatch, -) -> None: - monkeypatch.delenv("PDFREST_API_KEY", raising=False) - input_file = make_source_file( - PdfRestFileID.generate(1), - "application/postscript", - "example.ps", - ) - output_id = str(PdfRestFileID.generate()) - captured_timeout: dict[str, float | dict[str, float] | None] = {} - - def handler(request: httpx.Request) -> httpx.Response: - if request.method == "POST" and request.url.path == "/pdf": - assert request.url.params["trace"] == "true" - assert request.headers["X-Debug"] == "sync" - captured_timeout["value"] = request.extensions.get("timeout") - payload = json.loads(request.content.decode("utf-8")) - assert payload["debug"] is True - assert payload["compression"] == "lossy" - assert payload["downsample"] == 600 - assert payload["id"] == str(input_file.id) - assert payload["output"] == "custom" - return httpx.Response( - 200, - json={ - "inputId": [input_file.id], - "outputId": [output_id], - }, - ) - if request.method == "GET" and request.url.path == f"/resource/{output_id}": - assert request.url.params["trace"] == "true" - assert request.headers["X-Debug"] == "sync" - return httpx.Response( - 200, - json=build_file_info_payload( - output_id, "custom.pdf", "application/pdf" - ), - ) - msg = f"Unexpected request {request.method} {request.url}" - raise AssertionError(msg) - - transport = httpx.MockTransport(handler) - with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: - response = client.convert_to_pdf( - input_file, - output="custom", - compression="lossy", - downsample=600, - extra_query={"trace": "true"}, - extra_headers={"X-Debug": "sync"}, - extra_body={"debug": True}, - timeout=0.5, - ) - - assert isinstance(response, PdfRestFileBasedResponse) - assert response.output_file.name == "custom.pdf" - timeout_value = captured_timeout["value"] - assert timeout_value is not None - if isinstance(timeout_value, dict): - assert all( - component == pytest.approx(0.5) for component in timeout_value.values() - ) - else: - assert timeout_value == pytest.approx(0.5) - - -def test_convert_to_pdf_validation_errors() -> None: - word_file = make_source_file( - PdfRestFileID.generate(1), - "application/msword", - "example.doc", - ) - image_file = make_source_file( - PdfRestFileID.generate(2), - "image/jpeg", - "photo.jpg", - ) - - with pytest.raises(ValidationError, match="Must be a supported file type"): - ConvertToPdfPayload.model_validate( - { - "files": [ - make_source_file( - PdfRestFileID.generate(1), - "application/pdf", - "example.pdf", - ) - ] - } - ) - - with pytest.raises( - ValidationError, match="locale is only supported for Excel inputs" - ): - ConvertToPdfPayload.model_validate({"files": [word_file], "locale": "Germany"}) - - with pytest.raises( - ValidationError, match="page_size is only supported for HTML inputs" - ): - ConvertToPdfPayload.model_validate({"files": [word_file], "page_size": "A3"}) - - with pytest.raises( - ValidationError, - match="compression and downsample are only supported", - ): - ConvertToPdfPayload.model_validate( - {"files": [image_file], "compression": "lossless"} - ) - - with pytest.raises(ValidationError, match="page_margin must be a number"): - ConvertToPdfPayload.model_validate( - {"files": [word_file], "page_margin": "bad-margin"} - ) - - with pytest.raises( - ValidationError, - match="List should have at most 1 item after validation", - ): - ConvertToPdfPayload.model_validate({"files": [word_file, image_file]}) - - -def test_convert_urls_to_pdf_validation_errors() -> None: - with pytest.raises(ValidationError, match="Input should be a valid URL"): - ConvertUrlsToPdfPayload.model_validate({"url": "not-a-url"}) - - with pytest.raises(ValidationError, match="page_margin must be a number"): - ConvertUrlsToPdfPayload.model_validate( - {"url": ["https://example.com"], "page_margin": "mm"} - ) - - -@pytest.mark.asyncio -async def test_async_convert_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.delenv("PDFREST_API_KEY", raising=False) - input_file = make_source_file( - PdfRestFileID.generate(2), - "application/vnd.ms-excel", - "sheet.xls", - ) - output_id = str(PdfRestFileID.generate()) - payload_dump = ConvertToPdfPayload.model_validate( - { - "files": [input_file], - "output": "async-converted", - "locale": "US", - } - ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) - - seen: dict[str, int] = {"post": 0, "get": 0} - - def handler(request: httpx.Request) -> httpx.Response: - if request.method == "POST" and request.url.path == "/pdf": - seen["post"] += 1 - payload = json.loads(request.content.decode("utf-8")) - assert payload == payload_dump - return httpx.Response( - 200, - json={ - "inputId": [input_file.id], - "outputId": [output_id], - }, - ) - if request.method == "GET" and request.url.path == f"/resource/{output_id}": - seen["get"] += 1 - return httpx.Response( - 200, - json=build_file_info_payload( - output_id, "async-converted.pdf", "application/pdf" - ), - ) - msg = f"Unexpected request {request.method} {request.url}" - raise AssertionError(msg) - - transport = httpx.MockTransport(handler) - async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: - response = await client.convert_to_pdf( - input_file, output="async-converted", locale="US" - ) - - assert seen == {"post": 1, "get": 1} - assert isinstance(response, PdfRestFileBasedResponse) - assert response.output_file.name == "async-converted.pdf" - assert response.output_file.type == "application/pdf" - assert str(response.input_id) == str(input_file.id) - - -@pytest.mark.asyncio -async def test_async_convert_urls_to_pdf_request_customization( - monkeypatch: pytest.MonkeyPatch, -) -> None: - monkeypatch.delenv("PDFREST_API_KEY", raising=False) - urls = ["https://example.com/page", "https://example.com/other"] - output_id = str(PdfRestFileID.generate()) - captured_timeout: dict[str, float | dict[str, float] | None] = {} - - def handler(request: httpx.Request) -> httpx.Response: - if request.method == "POST" and request.url.path == "/pdf": - assert request.url.params["trace"] == "async" - assert request.headers["X-Debug"] == "async" - captured_timeout["value"] = request.extensions.get("timeout") - payload = json.loads(request.content.decode("utf-8")) - assert payload["url"] == urls - assert payload["output"] == "async-url" - assert payload["page_orientation"] == "portrait" - assert payload["debug"] == "yes" - return httpx.Response( - 200, - json={ - "inputId": [PdfRestFileID.generate()], - "outputId": [output_id], - }, - ) - if request.method == "GET" and request.url.path == f"/resource/{output_id}": - assert request.url.params["trace"] == "async" - assert request.headers["X-Debug"] == "async" - return httpx.Response( - 200, - json=build_file_info_payload( - output_id, "async-url.pdf", "application/pdf" - ), - ) - msg = f"Unexpected request {request.method} {request.url}" - raise AssertionError(msg) - - transport = httpx.MockTransport(handler) - async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: - response = await client.convert_urls_to_pdf( - urls, - output="async-url", - page_orientation="portrait", - extra_query={"trace": "async"}, - extra_headers={"X-Debug": "async"}, - extra_body={"debug": "yes"}, - timeout=0.6, - ) - - assert isinstance(response, PdfRestFileBasedResponse) - assert response.output_file.name == "async-url.pdf" - timeout_value = captured_timeout["value"] - assert timeout_value is not None - if isinstance(timeout_value, dict): - assert all( - component == pytest.approx(0.6) for component in timeout_value.values() - ) - else: - assert timeout_value == pytest.approx(0.6) diff --git a/tests/test_convert_urls_to_pdf.py b/tests/test_convert_urls_to_pdf.py new file mode 100644 index 00000000..ac72ee2a --- /dev/null +++ b/tests/test_convert_urls_to_pdf.py @@ -0,0 +1,138 @@ +from __future__ import annotations + +import json + +import httpx +import pytest +from pydantic import ValidationError + +from pdfrest import AsyncPdfRestClient, PdfRestClient +from pdfrest.models import PdfRestFileBasedResponse, PdfRestFileID +from pdfrest.models._internal import ConvertUrlsToPdfPayload + +from .graphics_test_helpers import ASYNC_API_KEY, VALID_API_KEY, build_file_info_payload + + +def test_convert_urls_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + urls = ["https://example.com/page"] + output_id = str(PdfRestFileID.generate()) + payload_dump = ConvertUrlsToPdfPayload.model_validate( + { + "url": urls, + "output": "url-out", + "page_size": "letter", + "page_margin": "2.5in", + "page_orientation": "portrait", + "web_layout": "desktop", + "downsample": 300, + } + ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + payload = json.loads(request.content.decode("utf-8")) + assert payload == payload_dump + return httpx.Response( + 200, + json={ + "inputId": [PdfRestFileID.generate()], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "url-out.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_urls_to_pdf( + urls, + output="url-out", + page_size="letter", + page_margin="2.5in", + page_orientation="portrait", + web_layout="desktop", + downsample=300, + ) + + assert response.output_file.name == "url-out.pdf" + assert response.output_file.type == "application/pdf" + + +def test_convert_urls_to_pdf_validation_errors() -> None: + with pytest.raises(ValidationError, match="Input should be a valid URL"): + ConvertUrlsToPdfPayload.model_validate({"url": "not-a-url"}) + + with pytest.raises(ValidationError, match="page_margin must be a number"): + ConvertUrlsToPdfPayload.model_validate( + {"url": ["https://example.com"], "page_margin": "mm"} + ) + + +@pytest.mark.asyncio +async def test_async_convert_urls_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + urls = ["https://example.com/page", "https://example.com/other"] + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["url"] == urls + assert payload["output"] == "async-url" + assert payload["page_orientation"] == "portrait" + assert payload["debug"] == "yes" + return httpx.Response( + 200, + json={ + "inputId": [PdfRestFileID.generate()], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-url.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_urls_to_pdf( + urls, + output="async-url", + page_orientation="portrait", + extra_query={"trace": "async"}, + extra_headers={"X-Debug": "async"}, + extra_body={"debug": "yes"}, + timeout=0.6, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-url.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.6) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.6) From 75af16b413a56b4c572792bece011e1a1ee396cb Mon Sep 17 00:00:00 2001 From: Christopher Green Date: Fri, 13 Feb 2026 13:15:39 -0600 Subject: [PATCH 04/10] client.py: Streamline `payload` dicts Assisted-by: Codex --- src/pdfrest/client.py | 228 +++++++++++++++++++----------------------- 1 file changed, 104 insertions(+), 124 deletions(-) diff --git a/src/pdfrest/client.py b/src/pdfrest/client.py index 4c93a920..0766d0e4 100644 --- a/src/pdfrest/client.py +++ b/src/pdfrest/client.py @@ -3324,25 +3324,19 @@ def convert_office_to_pdf( ) -> PdfRestFileBasedResponse: """Convert a Microsoft Office file (Word, Excel, PowerPoint) to PDF.""" - payload: dict[str, Any] = {"files": file} - if output is not None: - payload["output"] = output - if compression is not None: - payload["compression"] = compression - if downsample is not None: - payload["downsample"] = downsample - if tagged_pdf is not None: - payload["tagged_pdf"] = tagged_pdf - if locale is not None: - payload["locale"] = locale - if page_size is not None: - payload["page_size"] = page_size - if page_margin is not None: - payload["page_margin"] = page_margin - if page_orientation is not None: - payload["page_orientation"] = page_orientation - if web_layout is not None: - payload["web_layout"] = web_layout + payload: dict[str, Any] = { + "files": file, + "output": output, + "compression": compression, + "downsample": downsample, + "tagged_pdf": tagged_pdf, + "locale": locale, + "page_size": page_size, + "page_margin": page_margin, + "page_orientation": page_orientation, + "web_layout": web_layout, + } + payload = {key: value for key, value in payload.items() if value is not None} return self._post_file_operation( endpoint="/pdf", @@ -3368,13 +3362,13 @@ def convert_postscript_to_pdf( ) -> PdfRestFileBasedResponse: """Convert a PostScript or EPS file to PDF.""" - payload: dict[str, Any] = {"files": file} - if output is not None: - payload["output"] = output - if compression is not None: - payload["compression"] = compression - if downsample is not None: - payload["downsample"] = downsample + payload: dict[str, Any] = { + "files": file, + "output": output, + "compression": compression, + "downsample": downsample, + } + payload = {key: value for key, value in payload.items() if value is not None} return self._post_file_operation( endpoint="/pdf", @@ -3398,9 +3392,11 @@ def convert_email_to_pdf( ) -> PdfRestFileBasedResponse: """Convert an RFC822 email file to PDF.""" - payload: dict[str, Any] = {"files": file} - if output is not None: - payload["output"] = output + payload: dict[str, Any] = { + "files": file, + "output": output, + } + payload = {key: value for key, value in payload.items() if value is not None} return self._post_file_operation( endpoint="/pdf", @@ -3424,9 +3420,11 @@ def convert_image_to_pdf( ) -> PdfRestFileBasedResponse: """Convert a supported image file to PDF.""" - payload: dict[str, Any] = {"files": file} - if output is not None: - payload["output"] = output + payload: dict[str, Any] = { + "files": file, + "output": output, + } + payload = {key: value for key, value in payload.items() if value is not None} return self._post_file_operation( endpoint="/pdf", @@ -3456,21 +3454,17 @@ def convert_html_to_pdf( ) -> PdfRestFileBasedResponse: """Convert an uploaded HTML file to PDF.""" - payload: dict[str, Any] = {"files": file} - if output is not None: - payload["output"] = output - if compression is not None: - payload["compression"] = compression - if downsample is not None: - payload["downsample"] = downsample - if page_size is not None: - payload["page_size"] = page_size - if page_margin is not None: - payload["page_margin"] = page_margin - if page_orientation is not None: - payload["page_orientation"] = page_orientation - if web_layout is not None: - payload["web_layout"] = web_layout + payload: dict[str, Any] = { + "files": file, + "output": output, + "compression": compression, + "downsample": downsample, + "page_size": page_size, + "page_margin": page_margin, + "page_orientation": page_orientation, + "web_layout": web_layout, + } + payload = {key: value for key, value in payload.items() if value is not None} return self._post_file_operation( endpoint="/pdf", @@ -3500,21 +3494,17 @@ def convert_urls_to_pdf( ) -> PdfRestFileBasedResponse: """Convert HTML content from one or more URLs to PDF.""" - payload: dict[str, Any] = {"url": urls} - if output is not None: - payload["output"] = output - if compression is not None: - payload["compression"] = compression - if downsample is not None: - payload["downsample"] = downsample - if page_size is not None: - payload["page_size"] = page_size - if page_margin is not None: - payload["page_margin"] = page_margin - if page_orientation is not None: - payload["page_orientation"] = page_orientation - if web_layout is not None: - payload["web_layout"] = web_layout + payload: dict[str, Any] = { + "url": urls, + "output": output, + "compression": compression, + "downsample": downsample, + "page_size": page_size, + "page_margin": page_margin, + "page_orientation": page_orientation, + "web_layout": web_layout, + } + payload = {key: value for key, value in payload.items() if value is not None} return self._post_file_operation( endpoint="/pdf", @@ -5037,25 +5027,19 @@ async def convert_office_to_pdf( ) -> PdfRestFileBasedResponse: """Asynchronously convert a Microsoft Office file to PDF.""" - payload: dict[str, Any] = {"files": file} - if output is not None: - payload["output"] = output - if compression is not None: - payload["compression"] = compression - if downsample is not None: - payload["downsample"] = downsample - if tagged_pdf is not None: - payload["tagged_pdf"] = tagged_pdf - if locale is not None: - payload["locale"] = locale - if page_size is not None: - payload["page_size"] = page_size - if page_margin is not None: - payload["page_margin"] = page_margin - if page_orientation is not None: - payload["page_orientation"] = page_orientation - if web_layout is not None: - payload["web_layout"] = web_layout + payload: dict[str, Any] = { + "files": file, + "output": output, + "compression": compression, + "downsample": downsample, + "tagged_pdf": tagged_pdf, + "locale": locale, + "page_size": page_size, + "page_margin": page_margin, + "page_orientation": page_orientation, + "web_layout": web_layout, + } + payload = {key: value for key, value in payload.items() if value is not None} return await self._post_file_operation( endpoint="/pdf", @@ -5081,13 +5065,13 @@ async def convert_postscript_to_pdf( ) -> PdfRestFileBasedResponse: """Asynchronously convert a PostScript or EPS file to PDF.""" - payload: dict[str, Any] = {"files": file} - if output is not None: - payload["output"] = output - if compression is not None: - payload["compression"] = compression - if downsample is not None: - payload["downsample"] = downsample + payload: dict[str, Any] = { + "files": file, + "output": output, + "compression": compression, + "downsample": downsample, + } + payload = {key: value for key, value in payload.items() if value is not None} return await self._post_file_operation( endpoint="/pdf", @@ -5111,9 +5095,11 @@ async def convert_email_to_pdf( ) -> PdfRestFileBasedResponse: """Asynchronously convert an RFC822 email file to PDF.""" - payload: dict[str, Any] = {"files": file} - if output is not None: - payload["output"] = output + payload: dict[str, Any] = { + "files": file, + "output": output, + } + payload = {key: value for key, value in payload.items() if value is not None} return await self._post_file_operation( endpoint="/pdf", @@ -5137,9 +5123,11 @@ async def convert_image_to_pdf( ) -> PdfRestFileBasedResponse: """Asynchronously convert a supported image file to PDF.""" - payload: dict[str, Any] = {"files": file} - if output is not None: - payload["output"] = output + payload: dict[str, Any] = { + "files": file, + "output": output, + } + payload = {key: value for key, value in payload.items() if value is not None} return await self._post_file_operation( endpoint="/pdf", @@ -5169,21 +5157,17 @@ async def convert_html_to_pdf( ) -> PdfRestFileBasedResponse: """Asynchronously convert an uploaded HTML file to PDF.""" - payload: dict[str, Any] = {"files": file} - if output is not None: - payload["output"] = output - if compression is not None: - payload["compression"] = compression - if downsample is not None: - payload["downsample"] = downsample - if page_size is not None: - payload["page_size"] = page_size - if page_margin is not None: - payload["page_margin"] = page_margin - if page_orientation is not None: - payload["page_orientation"] = page_orientation - if web_layout is not None: - payload["web_layout"] = web_layout + payload: dict[str, Any] = { + "files": file, + "output": output, + "compression": compression, + "downsample": downsample, + "page_size": page_size, + "page_margin": page_margin, + "page_orientation": page_orientation, + "web_layout": web_layout, + } + payload = {key: value for key, value in payload.items() if value is not None} return await self._post_file_operation( endpoint="/pdf", @@ -5213,21 +5197,17 @@ async def convert_urls_to_pdf( ) -> PdfRestFileBasedResponse: """Asynchronously convert HTML content from one or more URLs to PDF.""" - payload: dict[str, Any] = {"url": urls} - if output is not None: - payload["output"] = output - if compression is not None: - payload["compression"] = compression - if downsample is not None: - payload["downsample"] = downsample - if page_size is not None: - payload["page_size"] = page_size - if page_margin is not None: - payload["page_margin"] = page_margin - if page_orientation is not None: - payload["page_orientation"] = page_orientation - if web_layout is not None: - payload["web_layout"] = web_layout + payload: dict[str, Any] = { + "url": urls, + "output": output, + "compression": compression, + "downsample": downsample, + "page_size": page_size, + "page_margin": page_margin, + "page_orientation": page_orientation, + "web_layout": web_layout, + } + payload = {key: value for key, value in payload.items() if value is not None} return await self._post_file_operation( endpoint="/pdf", From 5fffcc359d1c6d24eb36d9c9cc5c6434c82e4b8f Mon Sep 17 00:00:00 2001 From: "Kevin A. Mitchell" Date: Mon, 16 Feb 2026 14:01:38 -0600 Subject: [PATCH 05/10] client: Rename `convert_urls_to_pdf` to `convert_url_to_pdf` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Updated method name to reflect singular URL input, improving clarity. - Adjusted parameter from `urls: UrlInput` to `url: UrlValue` to align with single URL support. - Revised docstrings to clarify behavior for single URL input. - Renamed `ConvertUrlsToPdfPayload` → `ConvertUrlToPdfPayload`. - Ensured updates in related tests, including test names and payload expectations. Assisted-by: Codex --- src/pdfrest/client.py | 22 ++++++++--------- src/pdfrest/models/_internal.py | 10 ++++---- tests/live/test_live_convert_urls_to_pdf.py | 26 ++++----------------- tests/test_convert_urls_to_pdf.py | 26 ++++++++++----------- 4 files changed, 33 insertions(+), 51 deletions(-) diff --git a/src/pdfrest/client.py b/src/pdfrest/client.py index 0766d0e4..62129a8d 100644 --- a/src/pdfrest/client.py +++ b/src/pdfrest/client.py @@ -81,7 +81,7 @@ ConvertOfficeToPdfPayload, ConvertPostscriptToPdfPayload, ConvertToMarkdownPayload, - ConvertUrlsToPdfPayload, + ConvertUrlToPdfPayload, DeletePayload, ExtractImagesPayload, ExtractTextPayload, @@ -3476,9 +3476,9 @@ def convert_html_to_pdf( timeout=timeout, ) - def convert_urls_to_pdf( + def convert_url_to_pdf( self, - urls: UrlInput, + url: UrlValue, *, output: str | None = None, compression: PdfConversionCompression | None = None, @@ -3492,10 +3492,10 @@ def convert_urls_to_pdf( extra_body: Body | None = None, timeout: TimeoutTypes | None = None, ) -> PdfRestFileBasedResponse: - """Convert HTML content from one or more URLs to PDF.""" + """Convert HTML content from one URL to PDF.""" payload: dict[str, Any] = { - "url": urls, + "url": url, "output": output, "compression": compression, "downsample": downsample, @@ -3509,7 +3509,7 @@ def convert_urls_to_pdf( return self._post_file_operation( endpoint="/pdf", payload=payload, - payload_model=ConvertUrlsToPdfPayload, + payload_model=ConvertUrlToPdfPayload, extra_query=extra_query, extra_headers=extra_headers, extra_body=extra_body, @@ -5179,9 +5179,9 @@ async def convert_html_to_pdf( timeout=timeout, ) - async def convert_urls_to_pdf( + async def convert_url_to_pdf( self, - urls: UrlInput, + url: UrlValue, *, output: str | None = None, compression: PdfConversionCompression | None = None, @@ -5195,10 +5195,10 @@ async def convert_urls_to_pdf( extra_body: Body | None = None, timeout: TimeoutTypes | None = None, ) -> PdfRestFileBasedResponse: - """Asynchronously convert HTML content from one or more URLs to PDF.""" + """Asynchronously convert HTML content from one URL to PDF.""" payload: dict[str, Any] = { - "url": urls, + "url": url, "output": output, "compression": compression, "downsample": downsample, @@ -5212,7 +5212,7 @@ async def convert_urls_to_pdf( return await self._post_file_operation( endpoint="/pdf", payload=payload, - payload_model=ConvertUrlsToPdfPayload, + payload_model=ConvertUrlToPdfPayload, extra_query=extra_query, extra_headers=extra_headers, extra_body=extra_body, diff --git a/src/pdfrest/models/_internal.py b/src/pdfrest/models/_internal.py index 2a249a3f..4a0b76ea 100644 --- a/src/pdfrest/models/_internal.py +++ b/src/pdfrest/models/_internal.py @@ -793,14 +793,12 @@ class ConvertHtmlToPdfPayload(BaseModel): ] = None -class ConvertUrlsToPdfPayload(BaseModel): - """Adapt caller options into a pdfRest-ready convert-to-pdf payload for URLs.""" +class ConvertUrlToPdfPayload(BaseModel): + """Adapt caller options into a pdfRest-ready convert-to-pdf payload for one URL.""" url: Annotated[ - list[HttpUrl], - Field(serialization_alias="url", min_length=1), - BeforeValidator(_list_of_strings), - BeforeValidator(_ensure_list), + HttpUrl, + Field(serialization_alias="url"), ] output: Annotated[ str | None, diff --git a/tests/live/test_live_convert_urls_to_pdf.py b/tests/live/test_live_convert_urls_to_pdf.py index c6e0e716..25461688 100644 --- a/tests/live/test_live_convert_urls_to_pdf.py +++ b/tests/live/test_live_convert_urls_to_pdf.py @@ -4,34 +4,19 @@ from pdfrest import AsyncPdfRestClient, PdfRestApiError, PdfRestClient -from ..resources import get_test_resource_path - - -@pytest.fixture(scope="module") -def uploaded_html_url_for_pdf( - pdfrest_api_key: str, - pdfrest_live_base_url: str, -) -> str: - resource = get_test_resource_path("sample.html") - with PdfRestClient( - api_key=pdfrest_api_key, - base_url=pdfrest_live_base_url, - ) as client: - uploaded = client.files.create_from_paths([resource])[0] - return str(uploaded.url) +LIVE_HTML_URL = "https://example.com" def test_live_convert_urls_to_pdf_success( pdfrest_api_key: str, pdfrest_live_base_url: str, - uploaded_html_url_for_pdf: str, ) -> None: with PdfRestClient( api_key=pdfrest_api_key, base_url=pdfrest_live_base_url, ) as client: - response = client.convert_urls_to_pdf( - [uploaded_html_url_for_pdf], + response = client.convert_url_to_pdf( + LIVE_HTML_URL, output="live-html-url", page_size="letter", page_margin="8mm", @@ -52,14 +37,13 @@ def test_live_convert_urls_to_pdf_success( async def test_live_async_convert_urls_to_pdf_invalid_page_size( pdfrest_api_key: str, pdfrest_live_base_url: str, - uploaded_html_url_for_pdf: str, ) -> None: async with AsyncPdfRestClient( api_key=pdfrest_api_key, base_url=pdfrest_live_base_url, ) as client: with pytest.raises(PdfRestApiError, match=r"(?i)page_size|page size"): - await client.convert_urls_to_pdf( - [uploaded_html_url_for_pdf], + await client.convert_url_to_pdf( + LIVE_HTML_URL, extra_body={"page_size": "poster"}, ) diff --git a/tests/test_convert_urls_to_pdf.py b/tests/test_convert_urls_to_pdf.py index ac72ee2a..7ae2677a 100644 --- a/tests/test_convert_urls_to_pdf.py +++ b/tests/test_convert_urls_to_pdf.py @@ -8,18 +8,18 @@ from pdfrest import AsyncPdfRestClient, PdfRestClient from pdfrest.models import PdfRestFileBasedResponse, PdfRestFileID -from pdfrest.models._internal import ConvertUrlsToPdfPayload +from pdfrest.models._internal import ConvertUrlToPdfPayload from .graphics_test_helpers import ASYNC_API_KEY, VALID_API_KEY, build_file_info_payload def test_convert_urls_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: monkeypatch.delenv("PDFREST_API_KEY", raising=False) - urls = ["https://example.com/page"] + url = "https://example.com/page" output_id = str(PdfRestFileID.generate()) - payload_dump = ConvertUrlsToPdfPayload.model_validate( + payload_dump = ConvertUrlToPdfPayload.model_validate( { - "url": urls, + "url": url, "output": "url-out", "page_size": "letter", "page_margin": "2.5in", @@ -52,8 +52,8 @@ def handler(request: httpx.Request) -> httpx.Response: transport = httpx.MockTransport(handler) with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: - response = client.convert_urls_to_pdf( - urls, + response = client.convert_url_to_pdf( + url, output="url-out", page_size="letter", page_margin="2.5in", @@ -68,11 +68,11 @@ def handler(request: httpx.Request) -> httpx.Response: def test_convert_urls_to_pdf_validation_errors() -> None: with pytest.raises(ValidationError, match="Input should be a valid URL"): - ConvertUrlsToPdfPayload.model_validate({"url": "not-a-url"}) + ConvertUrlToPdfPayload.model_validate({"url": "not-a-url"}) with pytest.raises(ValidationError, match="page_margin must be a number"): - ConvertUrlsToPdfPayload.model_validate( - {"url": ["https://example.com"], "page_margin": "mm"} + ConvertUrlToPdfPayload.model_validate( + {"url": "https://example.com", "page_margin": "mm"} ) @@ -81,7 +81,7 @@ async def test_async_convert_urls_to_pdf_request_customization( monkeypatch: pytest.MonkeyPatch, ) -> None: monkeypatch.delenv("PDFREST_API_KEY", raising=False) - urls = ["https://example.com/page", "https://example.com/other"] + url = "https://example.com/page" output_id = str(PdfRestFileID.generate()) captured_timeout: dict[str, float | dict[str, float] | None] = {} @@ -91,7 +91,7 @@ def handler(request: httpx.Request) -> httpx.Response: assert request.headers["X-Debug"] == "async" captured_timeout["value"] = request.extensions.get("timeout") payload = json.loads(request.content.decode("utf-8")) - assert payload["url"] == urls + assert payload["url"] == url assert payload["output"] == "async-url" assert payload["page_orientation"] == "portrait" assert payload["debug"] == "yes" @@ -116,8 +116,8 @@ def handler(request: httpx.Request) -> httpx.Response: transport = httpx.MockTransport(handler) async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: - response = await client.convert_urls_to_pdf( - urls, + response = await client.convert_url_to_pdf( + url, output="async-url", page_orientation="portrait", extra_query={"trace": "async"}, From 6e9cf6a17b3d005b81c9ab1b6ad0a92dc39f04ef Mon Sep 17 00:00:00 2001 From: "Kevin A. Mitchell" Date: Mon, 16 Feb 2026 14:02:50 -0600 Subject: [PATCH 06/10] client: Add default values for PDF conversion parameters - Set default values for `compression`, `downsample`, `tagged_pdf`, `page_size`, `page_margin`, `page_orientation`, and `web_layout` in client methods. - Aligned test cases with updated defaults to ensure consistent behavior. Assisted-by: Codex --- src/pdfrest/client.py | 64 ++++++++++++++--------------- tests/test_convert_html_to_pdf.py | 6 +++ tests/test_convert_office_to_pdf.py | 3 ++ tests/test_convert_urls_to_pdf.py | 1 + 4 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/pdfrest/client.py b/src/pdfrest/client.py index 62129a8d..505f1288 100644 --- a/src/pdfrest/client.py +++ b/src/pdfrest/client.py @@ -3309,9 +3309,9 @@ def convert_office_to_pdf( file: PdfRestFile | Sequence[PdfRestFile], *, output: str | None = None, - compression: PdfConversionCompression | None = None, - downsample: PdfConversionDownsample | None = None, - tagged_pdf: bool | None = None, + compression: PdfConversionCompression = "lossy", + downsample: PdfConversionDownsample = 300, + tagged_pdf: bool = False, locale: PdfConversionLocale | None = None, page_size: HtmlPageSize | None = None, page_margin: str | None = None, @@ -3353,7 +3353,7 @@ def convert_postscript_to_pdf( file: PdfRestFile | Sequence[PdfRestFile], *, output: str | None = None, - compression: PdfConversionCompression | None = None, + compression: PdfConversionCompression = "lossy", downsample: PdfConversionDownsample | None = None, extra_query: Query | None = None, extra_headers: AnyMapping | None = None, @@ -3441,12 +3441,12 @@ def convert_html_to_pdf( file: PdfRestFile | Sequence[PdfRestFile], *, output: str | None = None, - compression: PdfConversionCompression | None = None, - downsample: PdfConversionDownsample | None = None, - page_size: HtmlPageSize | None = None, - page_margin: str | None = None, - page_orientation: HtmlPageOrientation | None = None, - web_layout: HtmlWebLayout | None = None, + compression: PdfConversionCompression = "lossy", + downsample: PdfConversionDownsample = 300, + page_size: HtmlPageSize = "letter", + page_margin: str = "1.0in", + page_orientation: HtmlPageOrientation = "portrait", + web_layout: HtmlWebLayout = "desktop", extra_query: Query | None = None, extra_headers: AnyMapping | None = None, extra_body: Body | None = None, @@ -3481,12 +3481,12 @@ def convert_url_to_pdf( url: UrlValue, *, output: str | None = None, - compression: PdfConversionCompression | None = None, - downsample: PdfConversionDownsample | None = None, - page_size: HtmlPageSize | None = None, - page_margin: str | None = None, - page_orientation: HtmlPageOrientation | None = None, - web_layout: HtmlWebLayout | None = None, + compression: PdfConversionCompression = "lossy", + downsample: PdfConversionDownsample = 300, + page_size: HtmlPageSize = "letter", + page_margin: str = "1.0in", + page_orientation: HtmlPageOrientation = "portrait", + web_layout: HtmlWebLayout = "desktop", extra_query: Query | None = None, extra_headers: AnyMapping | None = None, extra_body: Body | None = None, @@ -5012,9 +5012,9 @@ async def convert_office_to_pdf( file: PdfRestFile | Sequence[PdfRestFile], *, output: str | None = None, - compression: PdfConversionCompression | None = None, - downsample: PdfConversionDownsample | None = None, - tagged_pdf: bool | None = None, + compression: PdfConversionCompression = "lossy", + downsample: PdfConversionDownsample = 300, + tagged_pdf: bool = False, locale: PdfConversionLocale | None = None, page_size: HtmlPageSize | None = None, page_margin: str | None = None, @@ -5056,7 +5056,7 @@ async def convert_postscript_to_pdf( file: PdfRestFile | Sequence[PdfRestFile], *, output: str | None = None, - compression: PdfConversionCompression | None = None, + compression: PdfConversionCompression = "lossy", downsample: PdfConversionDownsample | None = None, extra_query: Query | None = None, extra_headers: AnyMapping | None = None, @@ -5144,12 +5144,12 @@ async def convert_html_to_pdf( file: PdfRestFile | Sequence[PdfRestFile], *, output: str | None = None, - compression: PdfConversionCompression | None = None, - downsample: PdfConversionDownsample | None = None, - page_size: HtmlPageSize | None = None, - page_margin: str | None = None, - page_orientation: HtmlPageOrientation | None = None, - web_layout: HtmlWebLayout | None = None, + compression: PdfConversionCompression = "lossy", + downsample: PdfConversionDownsample = 300, + page_size: HtmlPageSize = "letter", + page_margin: str = "1.0in", + page_orientation: HtmlPageOrientation = "portrait", + web_layout: HtmlWebLayout = "desktop", extra_query: Query | None = None, extra_headers: AnyMapping | None = None, extra_body: Body | None = None, @@ -5184,12 +5184,12 @@ async def convert_url_to_pdf( url: UrlValue, *, output: str | None = None, - compression: PdfConversionCompression | None = None, - downsample: PdfConversionDownsample | None = None, - page_size: HtmlPageSize | None = None, - page_margin: str | None = None, - page_orientation: HtmlPageOrientation | None = None, - web_layout: HtmlWebLayout | None = None, + compression: PdfConversionCompression = "lossy", + downsample: PdfConversionDownsample = 300, + page_size: HtmlPageSize = "letter", + page_margin: str = "1.0in", + page_orientation: HtmlPageOrientation = "portrait", + web_layout: HtmlWebLayout = "desktop", extra_query: Query | None = None, extra_headers: AnyMapping | None = None, extra_body: Body | None = None, diff --git a/tests/test_convert_html_to_pdf.py b/tests/test_convert_html_to_pdf.py index 7a58a0ed..4a9e7474 100644 --- a/tests/test_convert_html_to_pdf.py +++ b/tests/test_convert_html_to_pdf.py @@ -32,6 +32,7 @@ def test_convert_html_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: "page_orientation": "landscape", "web_layout": "tablet", "compression": "lossy", + "downsample": 300, } ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) @@ -183,7 +184,12 @@ async def test_async_convert_html_to_pdf_success( { "files": [input_file], "output": "async-converted", + "compression": "lossy", + "downsample": 300, + "page_size": "letter", + "page_margin": "1.0in", "page_orientation": "portrait", + "web_layout": "desktop", } ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) diff --git a/tests/test_convert_office_to_pdf.py b/tests/test_convert_office_to_pdf.py index 99c37936..8fe206a7 100644 --- a/tests/test_convert_office_to_pdf.py +++ b/tests/test_convert_office_to_pdf.py @@ -189,6 +189,9 @@ async def test_async_convert_office_to_pdf_success( { "files": [input_file], "output": "async-converted", + "compression": "lossy", + "downsample": 300, + "tagged_pdf": False, "locale": "US", } ).model_dump(mode="json", by_alias=True, exclude_none=True, exclude_unset=True) diff --git a/tests/test_convert_urls_to_pdf.py b/tests/test_convert_urls_to_pdf.py index 7ae2677a..85697763 100644 --- a/tests/test_convert_urls_to_pdf.py +++ b/tests/test_convert_urls_to_pdf.py @@ -21,6 +21,7 @@ def test_convert_urls_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: { "url": url, "output": "url-out", + "compression": "lossy", "page_size": "letter", "page_margin": "2.5in", "page_orientation": "portrait", From 2b60f45bce9bfd2a2d8831f49634ebc99126c75a Mon Sep 17 00:00:00 2001 From: "Kevin A. Mitchell" Date: Mon, 16 Feb 2026 14:06:03 -0600 Subject: [PATCH 07/10] tests: Rename test methods and files to align with singular URL conversion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Updated test file names: `test_convert_urls_to_pdf.py -> test_convert_url_to_pdf.py` `test_live_convert_urls_to_pdf.py -> test_live_convert_url_to_pdf.py` - Renamed test functions to reflect singular URL input: - `test_convert_urls_to_pdf_success` → `test_convert_url_to_pdf_success` - `test_convert_urls_to_pdf_validation_errors` → `test_convert_url_to_pdf_validation_errors` - `test_async_convert_urls_to_pdf_request_customization` → `test_async_convert_url_to_pdf_request_customization` - `test_live_convert_urls_to_pdf_success` → `test_live_convert_url_to_pdf_success` - `test_live_async_convert_urls_to_pdf_invalid_page_size` → `test_live_async_convert_url_to_pdf_invalid_page_size` Assisted-by: Codex --- ...nvert_urls_to_pdf.py => test_live_convert_url_to_pdf.py} | 4 ++-- ...st_convert_urls_to_pdf.py => test_convert_url_to_pdf.py} | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) rename tests/live/{test_live_convert_urls_to_pdf.py => test_live_convert_url_to_pdf.py} (92%) rename tests/{test_convert_urls_to_pdf.py => test_convert_url_to_pdf.py} (96%) diff --git a/tests/live/test_live_convert_urls_to_pdf.py b/tests/live/test_live_convert_url_to_pdf.py similarity index 92% rename from tests/live/test_live_convert_urls_to_pdf.py rename to tests/live/test_live_convert_url_to_pdf.py index 25461688..746f23f1 100644 --- a/tests/live/test_live_convert_urls_to_pdf.py +++ b/tests/live/test_live_convert_url_to_pdf.py @@ -7,7 +7,7 @@ LIVE_HTML_URL = "https://example.com" -def test_live_convert_urls_to_pdf_success( +def test_live_convert_url_to_pdf_success( pdfrest_api_key: str, pdfrest_live_base_url: str, ) -> None: @@ -34,7 +34,7 @@ def test_live_convert_urls_to_pdf_success( @pytest.mark.asyncio -async def test_live_async_convert_urls_to_pdf_invalid_page_size( +async def test_live_async_convert_url_to_pdf_invalid_page_size( pdfrest_api_key: str, pdfrest_live_base_url: str, ) -> None: diff --git a/tests/test_convert_urls_to_pdf.py b/tests/test_convert_url_to_pdf.py similarity index 96% rename from tests/test_convert_urls_to_pdf.py rename to tests/test_convert_url_to_pdf.py index 85697763..a370df26 100644 --- a/tests/test_convert_urls_to_pdf.py +++ b/tests/test_convert_url_to_pdf.py @@ -13,7 +13,7 @@ from .graphics_test_helpers import ASYNC_API_KEY, VALID_API_KEY, build_file_info_payload -def test_convert_urls_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: +def test_convert_url_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None: monkeypatch.delenv("PDFREST_API_KEY", raising=False) url = "https://example.com/page" output_id = str(PdfRestFileID.generate()) @@ -67,7 +67,7 @@ def handler(request: httpx.Request) -> httpx.Response: assert response.output_file.type == "application/pdf" -def test_convert_urls_to_pdf_validation_errors() -> None: +def test_convert_url_to_pdf_validation_errors() -> None: with pytest.raises(ValidationError, match="Input should be a valid URL"): ConvertUrlToPdfPayload.model_validate({"url": "not-a-url"}) @@ -78,7 +78,7 @@ def test_convert_urls_to_pdf_validation_errors() -> None: @pytest.mark.asyncio -async def test_async_convert_urls_to_pdf_request_customization( +async def test_async_convert_url_to_pdf_request_customization( monkeypatch: pytest.MonkeyPatch, ) -> None: monkeypatch.delenv("PDFREST_API_KEY", raising=False) From b7b25f0b884bde8752fb8c5babfd5b114e85fb5a Mon Sep 17 00:00:00 2001 From: "Kevin A. Mitchell" Date: Mon, 16 Feb 2026 14:51:12 -0600 Subject: [PATCH 08/10] models: Add serializer for first URL in list - Implemented `_serialize_as_first_url` to extract the first URL from a list. - Updated `url` in `ConvertToPdfPayload` to accept a list of `HttpUrl` with enforced length of 1. - Applied `PlainSerializer` to ensure only the first URL is serialized. Assisted-by: Codex --- src/pdfrest/models/_internal.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/pdfrest/models/_internal.py b/src/pdfrest/models/_internal.py index 4a0b76ea..1e3860af 100644 --- a/src/pdfrest/models/_internal.py +++ b/src/pdfrest/models/_internal.py @@ -120,6 +120,10 @@ def _serialize_as_first_file_id(value: list[PdfRestFile]) -> str: return str(value[0].id) +def _serialize_as_first_url(value: list[HttpUrl]) -> str: + return str(value[0]) + + def _serialize_as_comma_separated_string(value: list[Any] | None) -> str | None: if value is None: return None @@ -797,8 +801,10 @@ class ConvertUrlToPdfPayload(BaseModel): """Adapt caller options into a pdfRest-ready convert-to-pdf payload for one URL.""" url: Annotated[ - HttpUrl, - Field(serialization_alias="url"), + list[HttpUrl], + Field(serialization_alias="url", min_length=1, max_length=1), + BeforeValidator(_ensure_list), + PlainSerializer(_serialize_as_first_url), ] output: Annotated[ str | None, From ca21c8f6a6d6a9a41229002d301035b6f1c1f28b Mon Sep 17 00:00:00 2001 From: "Kevin A. Mitchell" Date: Mon, 16 Feb 2026 15:26:40 -0600 Subject: [PATCH 09/10] tests: Add validation and request customization tests for PDF conversions - Added tests for invalid page size handling across various conversion methods: `convert_html_to_pdf`, `convert_url_to_pdf`, `convert_email_to_pdf`, `convert_image_to_pdf`, `convert_office_to_pdf`, and `convert_postscript_to_pdf`. - Introduced request customization tests, including validations for custom query parameters, headers, body, and timeout behavior. - Ensured comprehensive validation of async and sync client operations. Assisted-by: Codex --- tests/live/test_live_convert_html_to_pdf.py | 37 ++++++++++- tests/live/test_live_convert_url_to_pdf.py | 41 ++++++++++++ tests/test_convert_email_to_pdf.py | 64 +++++++++++++++++++ tests/test_convert_html_to_pdf.py | 66 +++++++++++++++++++ tests/test_convert_image_to_pdf.py | 64 +++++++++++++++++++ tests/test_convert_office_to_pdf.py | 70 +++++++++++++++++++++ tests/test_convert_postscript_to_pdf.py | 68 ++++++++++++++++++++ tests/test_convert_url_to_pdf.py | 69 ++++++++++++++++++++ 8 files changed, 478 insertions(+), 1 deletion(-) diff --git a/tests/live/test_live_convert_html_to_pdf.py b/tests/live/test_live_convert_html_to_pdf.py index 3dcf4f07..507a09c9 100644 --- a/tests/live/test_live_convert_html_to_pdf.py +++ b/tests/live/test_live_convert_html_to_pdf.py @@ -2,7 +2,7 @@ import pytest -from pdfrest import AsyncPdfRestClient, PdfRestClient +from pdfrest import AsyncPdfRestClient, PdfRestApiError, PdfRestClient from pdfrest.models import PdfRestFile from ..resources import get_test_resource_path @@ -71,3 +71,38 @@ async def test_live_async_convert_html_to_pdf_success( assert response.warning is None assert str(response.input_id) == str(uploaded_html_for_pdf.id) assert output_file.name.startswith("live-html-file-async") + + +def test_live_convert_html_to_pdf_invalid_page_size( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_html_for_pdf: PdfRestFile, +) -> None: + with ( + PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client, + pytest.raises(PdfRestApiError, match=r"(?i)page_size|page size"), + ): + client.convert_html_to_pdf( + uploaded_html_for_pdf, + extra_body={"page_size": "poster"}, + ) + + +@pytest.mark.asyncio +async def test_live_async_convert_html_to_pdf_invalid_page_size( + pdfrest_api_key: str, + pdfrest_live_base_url: str, + uploaded_html_for_pdf: PdfRestFile, +) -> None: + async with AsyncPdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + with pytest.raises(PdfRestApiError, match=r"(?i)page_size|page size"): + await client.convert_html_to_pdf( + uploaded_html_for_pdf, + extra_body={"page_size": "poster"}, + ) diff --git a/tests/live/test_live_convert_url_to_pdf.py b/tests/live/test_live_convert_url_to_pdf.py index 746f23f1..897f81cc 100644 --- a/tests/live/test_live_convert_url_to_pdf.py +++ b/tests/live/test_live_convert_url_to_pdf.py @@ -33,6 +33,47 @@ def test_live_convert_url_to_pdf_success( assert output_file.name.startswith("live-html-url") +@pytest.mark.asyncio +async def test_live_async_convert_url_to_pdf_success( + pdfrest_api_key: str, + pdfrest_live_base_url: str, +) -> None: + async with AsyncPdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client: + response = await client.convert_url_to_pdf( + LIVE_HTML_URL, + output="live-html-url-async", + page_orientation="portrait", + ) + + assert response.output_files + output_file = response.output_file + assert output_file.type == "application/pdf" + assert output_file.size > 0 + assert response.warning is None + assert str(response.input_id) + assert output_file.name.startswith("live-html-url-async") + + +def test_live_convert_url_to_pdf_invalid_page_size( + pdfrest_api_key: str, + pdfrest_live_base_url: str, +) -> None: + with ( + PdfRestClient( + api_key=pdfrest_api_key, + base_url=pdfrest_live_base_url, + ) as client, + pytest.raises(PdfRestApiError, match=r"(?i)page_size|page size"), + ): + client.convert_url_to_pdf( + LIVE_HTML_URL, + extra_body={"page_size": "poster"}, + ) + + @pytest.mark.asyncio async def test_live_async_convert_url_to_pdf_invalid_page_size( pdfrest_api_key: str, diff --git a/tests/test_convert_email_to_pdf.py b/tests/test_convert_email_to_pdf.py index b3d05c47..754a2f45 100644 --- a/tests/test_convert_email_to_pdf.py +++ b/tests/test_convert_email_to_pdf.py @@ -210,3 +210,67 @@ def handler(request: httpx.Request) -> httpx.Response: assert response.output_file.name == "async-converted.pdf" assert response.output_file.type == "application/pdf" assert str(response.input_id) == str(input_file.id) + + +@pytest.mark.asyncio +async def test_async_convert_email_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "message/rfc822", + "async-message.eml", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["id"] == str(input_file.id) + assert payload["output"] == "async-custom" + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_email_to_pdf( + input_file, + output="async-custom", + extra_query={"trace": "async"}, + extra_headers={"X-Debug": "async"}, + extra_body={"debug": True}, + timeout=0.6, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.6) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.6) diff --git a/tests/test_convert_html_to_pdf.py b/tests/test_convert_html_to_pdf.py index 4a9e7474..3b1a8285 100644 --- a/tests/test_convert_html_to_pdf.py +++ b/tests/test_convert_html_to_pdf.py @@ -231,3 +231,69 @@ def handler(request: httpx.Request) -> httpx.Response: assert response.output_file.name == "async-converted.pdf" assert response.output_file.type == "application/pdf" assert str(response.input_id) == str(input_file.id) + + +@pytest.mark.asyncio +async def test_async_convert_html_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "text/html", + "example.html", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["id"] == str(input_file.id) + assert payload["output"] == "async-custom" + assert payload["downsample"] == 300 + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_html_to_pdf( + input_file, + output="async-custom", + downsample=300, + extra_query={"trace": "async"}, + extra_headers={"X-Debug": "async"}, + extra_body={"debug": True}, + timeout=0.6, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.6) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.6) diff --git a/tests/test_convert_image_to_pdf.py b/tests/test_convert_image_to_pdf.py index a2883d71..5c569a06 100644 --- a/tests/test_convert_image_to_pdf.py +++ b/tests/test_convert_image_to_pdf.py @@ -203,3 +203,67 @@ def handler(request: httpx.Request) -> httpx.Response: assert response.output_file.name == "async-converted.pdf" assert response.output_file.type == "application/pdf" assert str(response.input_id) == str(input_file.id) + + +@pytest.mark.asyncio +async def test_async_convert_image_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "image/png", + "async.png", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["id"] == str(input_file.id) + assert payload["output"] == "async-custom" + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_image_to_pdf( + input_file, + output="async-custom", + extra_query={"trace": "async"}, + extra_headers={"X-Debug": "async"}, + extra_body={"debug": True}, + timeout=0.6, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.6) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.6) diff --git a/tests/test_convert_office_to_pdf.py b/tests/test_convert_office_to_pdf.py index 8fe206a7..7a77f29b 100644 --- a/tests/test_convert_office_to_pdf.py +++ b/tests/test_convert_office_to_pdf.py @@ -234,3 +234,73 @@ def handler(request: httpx.Request) -> httpx.Response: assert response.output_file.name == "async-converted.pdf" assert response.output_file.type == "application/pdf" assert str(response.input_id) == str(input_file.id) + + +@pytest.mark.asyncio +async def test_async_convert_office_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "application/vnd.ms-excel", + "sheet.xls", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["compression"] == "lossy" + assert payload["downsample"] == 600 + assert payload["locale"] == "US" + assert payload["id"] == str(input_file.id) + assert payload["output"] == "async-custom" + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_office_to_pdf( + input_file, + output="async-custom", + compression="lossy", + downsample=600, + locale="US", + extra_query={"trace": "async"}, + extra_headers={"X-Debug": "async"}, + extra_body={"debug": True}, + timeout=0.6, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.6) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.6) diff --git a/tests/test_convert_postscript_to_pdf.py b/tests/test_convert_postscript_to_pdf.py index 14fe72a4..20ae98ac 100644 --- a/tests/test_convert_postscript_to_pdf.py +++ b/tests/test_convert_postscript_to_pdf.py @@ -213,3 +213,71 @@ def handler(request: httpx.Request) -> httpx.Response: assert response.output_file.name == "async-converted.pdf" assert response.output_file.type == "application/pdf" assert str(response.input_id) == str(input_file.id) + + +@pytest.mark.asyncio +async def test_async_convert_postscript_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + input_file = make_source_file( + str(PdfRestFileID.generate(2)), + "application/postscript", + "graphic.ps", + ) + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["debug"] is True + assert payload["compression"] == "lossy" + assert payload["downsample"] == 600 + assert payload["id"] == str(input_file.id) + assert payload["output"] == "async-custom" + return httpx.Response( + 200, + json={ + "inputId": [input_file.id], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "async" + assert request.headers["X-Debug"] == "async" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "async-custom.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client: + response = await client.convert_postscript_to_pdf( + input_file, + output="async-custom", + compression="lossy", + downsample=600, + extra_query={"trace": "async"}, + extra_headers={"X-Debug": "async"}, + extra_body={"debug": True}, + timeout=0.6, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "async-custom.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.6) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.6) diff --git a/tests/test_convert_url_to_pdf.py b/tests/test_convert_url_to_pdf.py index a370df26..cd40b96d 100644 --- a/tests/test_convert_url_to_pdf.py +++ b/tests/test_convert_url_to_pdf.py @@ -71,12 +71,81 @@ def test_convert_url_to_pdf_validation_errors() -> None: with pytest.raises(ValidationError, match="Input should be a valid URL"): ConvertUrlToPdfPayload.model_validate({"url": "not-a-url"}) + with pytest.raises(ValidationError, match="at least 1 item"): + ConvertUrlToPdfPayload.model_validate({"url": []}) + + with pytest.raises(ValidationError, match="at most 1 item"): + ConvertUrlToPdfPayload.model_validate( + {"url": ["https://example.com/one", "https://example.com/two"]} + ) + with pytest.raises(ValidationError, match="page_margin must be a number"): ConvertUrlToPdfPayload.model_validate( {"url": "https://example.com", "page_margin": "mm"} ) +def test_convert_url_to_pdf_request_customization( + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.delenv("PDFREST_API_KEY", raising=False) + url = "https://example.com/page" + output_id = str(PdfRestFileID.generate()) + captured_timeout: dict[str, float | dict[str, float] | None] = {} + + def handler(request: httpx.Request) -> httpx.Response: + if request.method == "POST" and request.url.path == "/pdf": + assert request.url.params["trace"] == "sync" + assert request.headers["X-Debug"] == "sync" + captured_timeout["value"] = request.extensions.get("timeout") + payload = json.loads(request.content.decode("utf-8")) + assert payload["url"] == url + assert payload["output"] == "sync-url" + assert payload["page_orientation"] == "portrait" + assert payload["debug"] == "yes" + return httpx.Response( + 200, + json={ + "inputId": [PdfRestFileID.generate()], + "outputId": [output_id], + }, + ) + if request.method == "GET" and request.url.path == f"/resource/{output_id}": + assert request.url.params["trace"] == "sync" + assert request.headers["X-Debug"] == "sync" + return httpx.Response( + 200, + json=build_file_info_payload( + output_id, "sync-url.pdf", "application/pdf" + ), + ) + msg = f"Unexpected request {request.method} {request.url}" + raise AssertionError(msg) + + transport = httpx.MockTransport(handler) + with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client: + response = client.convert_url_to_pdf( + url, + output="sync-url", + page_orientation="portrait", + extra_query={"trace": "sync"}, + extra_headers={"X-Debug": "sync"}, + extra_body={"debug": "yes"}, + timeout=0.5, + ) + + assert isinstance(response, PdfRestFileBasedResponse) + assert response.output_file.name == "sync-url.pdf" + timeout_value = captured_timeout["value"] + assert timeout_value is not None + if isinstance(timeout_value, dict): + assert all( + component == pytest.approx(0.5) for component in timeout_value.values() + ) + else: + assert timeout_value == pytest.approx(0.5) + + @pytest.mark.asyncio async def test_async_convert_url_to_pdf_request_customization( monkeypatch: pytest.MonkeyPatch, From 17b02ac7eeeb84e2f5d52a715e27b93bc256498e Mon Sep 17 00:00:00 2001 From: Christopher Green Date: Mon, 16 Feb 2026 16:06:34 -0600 Subject: [PATCH 10/10] pdf: Apply regex pattern match to `page_margin` Assisted-by: Codex --- src/pdfrest/models/_internal.py | 26 ++++++-------- tests/test_convert_html_to_pdf.py | 59 ++++++++++++++++++++++++++++++- tests/test_convert_url_to_pdf.py | 41 ++++++++++++++++++++- 3 files changed, 109 insertions(+), 17 deletions(-) diff --git a/src/pdfrest/models/_internal.py b/src/pdfrest/models/_internal.py index 1e3860af..65f65197 100644 --- a/src/pdfrest/models/_internal.py +++ b/src/pdfrest/models/_internal.py @@ -253,17 +253,7 @@ def _validate_output_language(value: str) -> str: return trimmed -_PAGE_MARGIN_PATTERN = re.compile(r"^(?:\d+(?:\.\d+)?)(?:mm|in)$") - - -def _validate_page_margin(value: str | None) -> str | None: - if value is None: - return None - trimmed = value.strip() - if not trimmed or not _PAGE_MARGIN_PATTERN.fullmatch(trimmed): - msg = "page_margin must be a number followed by 'in' or 'mm'." - raise ValueError(msg) - return trimmed +_PAGE_MARGIN_REGEX = r"^(?:\d+(?:\.\d+)?)(?:mm|in)$" class UploadURLs(BaseModel): @@ -784,8 +774,11 @@ class ConvertHtmlToPdfPayload(BaseModel): ] = None page_margin: Annotated[ str | None, - Field(serialization_alias="page_margin", default=None), - AfterValidator(_validate_page_margin), + Field( + serialization_alias="page_margin", + pattern=_PAGE_MARGIN_REGEX, + default=None, + ), ] = None page_orientation: Annotated[ HtmlPageOrientation | None, @@ -825,8 +818,11 @@ class ConvertUrlToPdfPayload(BaseModel): ] = None page_margin: Annotated[ str | None, - Field(serialization_alias="page_margin", default=None), - AfterValidator(_validate_page_margin), + Field( + serialization_alias="page_margin", + pattern=_PAGE_MARGIN_REGEX, + default=None, + ), ] = None page_orientation: Annotated[ HtmlPageOrientation | None, diff --git a/tests/test_convert_html_to_pdf.py b/tests/test_convert_html_to_pdf.py index 3b1a8285..294ab2ad 100644 --- a/tests/test_convert_html_to_pdf.py +++ b/tests/test_convert_html_to_pdf.py @@ -154,7 +154,7 @@ def test_convert_html_to_pdf_validation_errors() -> None: } ) - with pytest.raises(ValidationError, match="page_margin must be a number"): + with pytest.raises(ValidationError, match="String should match pattern"): ConvertHtmlToPdfPayload.model_validate( { "files": [ @@ -169,6 +169,63 @@ def test_convert_html_to_pdf_validation_errors() -> None: ) +@pytest.mark.parametrize( + "page_margin", + [ + pytest.param("8mm", id="whole-millimeters"), + pytest.param("2.5in", id="decimal-inches"), + pytest.param("10.25mm", id="long-decimal-millimeters"), + pytest.param("0in", id="zero-inches"), + ], +) +def test_convert_html_to_pdf_page_margin_accepts_documented_values( + page_margin: str, +) -> None: + payload = ConvertHtmlToPdfPayload.model_validate( + { + "files": [ + make_source_file( + str(PdfRestFileID.generate()), + "text/html", + "example.html", + ) + ], + "page_margin": page_margin, + } + ) + + assert payload.page_margin == page_margin + + +@pytest.mark.parametrize( + "page_margin", + [ + pytest.param("8", id="missing-unit"), + pytest.param("mm", id="missing-number"), + pytest.param("2.5 in", id="embedded-space"), + pytest.param("8MM", id="uppercase-unit"), + pytest.param(" 8mm", id="leading-space"), + pytest.param("8mm ", id="trailing-space"), + ], +) +def test_convert_html_to_pdf_page_margin_rejects_invalid_values( + page_margin: str, +) -> None: + with pytest.raises(ValidationError, match="String should match pattern"): + ConvertHtmlToPdfPayload.model_validate( + { + "files": [ + make_source_file( + str(PdfRestFileID.generate()), + "text/html", + "example.html", + ) + ], + "page_margin": page_margin, + } + ) + + @pytest.mark.asyncio async def test_async_convert_html_to_pdf_success( monkeypatch: pytest.MonkeyPatch, diff --git a/tests/test_convert_url_to_pdf.py b/tests/test_convert_url_to_pdf.py index cd40b96d..7f78bdbd 100644 --- a/tests/test_convert_url_to_pdf.py +++ b/tests/test_convert_url_to_pdf.py @@ -79,12 +79,51 @@ def test_convert_url_to_pdf_validation_errors() -> None: {"url": ["https://example.com/one", "https://example.com/two"]} ) - with pytest.raises(ValidationError, match="page_margin must be a number"): + with pytest.raises(ValidationError, match="String should match pattern"): ConvertUrlToPdfPayload.model_validate( {"url": "https://example.com", "page_margin": "mm"} ) +@pytest.mark.parametrize( + "page_margin", + [ + pytest.param("8mm", id="whole-millimeters"), + pytest.param("2.5in", id="decimal-inches"), + pytest.param("10.25mm", id="long-decimal-millimeters"), + pytest.param("0in", id="zero-inches"), + ], +) +def test_convert_url_to_pdf_page_margin_accepts_documented_values( + page_margin: str, +) -> None: + payload = ConvertUrlToPdfPayload.model_validate( + {"url": "https://example.com/page", "page_margin": page_margin} + ) + + assert payload.page_margin == page_margin + + +@pytest.mark.parametrize( + "page_margin", + [ + pytest.param("8", id="missing-unit"), + pytest.param("mm", id="missing-number"), + pytest.param("2.5 in", id="embedded-space"), + pytest.param("8MM", id="uppercase-unit"), + pytest.param(" 8mm", id="leading-space"), + pytest.param("8mm ", id="trailing-space"), + ], +) +def test_convert_url_to_pdf_page_margin_rejects_invalid_values( + page_margin: str, +) -> None: + with pytest.raises(ValidationError, match="String should match pattern"): + ConvertUrlToPdfPayload.model_validate( + {"url": "https://example.com/page", "page_margin": page_margin} + ) + + def test_convert_url_to_pdf_request_customization( monkeypatch: pytest.MonkeyPatch, ) -> None: