Skip to content

Commit cfb509b

Browse files
client: Rename convert_urls_to_pdf to convert_url_to_pdf
- 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
1 parent d25fd46 commit cfb509b

4 files changed

Lines changed: 33 additions & 51 deletions

File tree

src/pdfrest/client.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
ConvertOfficeToPdfPayload,
8282
ConvertPostscriptToPdfPayload,
8383
ConvertToMarkdownPayload,
84-
ConvertUrlsToPdfPayload,
84+
ConvertUrlToPdfPayload,
8585
DeletePayload,
8686
ExtractImagesPayload,
8787
ExtractTextPayload,
@@ -3359,9 +3359,9 @@ def convert_html_to_pdf(
33593359
timeout=timeout,
33603360
)
33613361

3362-
def convert_urls_to_pdf(
3362+
def convert_url_to_pdf(
33633363
self,
3364-
urls: UrlInput,
3364+
url: UrlValue,
33653365
*,
33663366
output: str | None = None,
33673367
compression: PdfConversionCompression | None = None,
@@ -3375,10 +3375,10 @@ def convert_urls_to_pdf(
33753375
extra_body: Body | None = None,
33763376
timeout: TimeoutTypes | None = None,
33773377
) -> PdfRestFileBasedResponse:
3378-
"""Convert HTML content from one or more URLs to PDF."""
3378+
"""Convert HTML content from one URL to PDF."""
33793379

33803380
payload: dict[str, Any] = {
3381-
"url": urls,
3381+
"url": url,
33823382
"output": output,
33833383
"compression": compression,
33843384
"downsample": downsample,
@@ -3392,7 +3392,7 @@ def convert_urls_to_pdf(
33923392
return self._post_file_operation(
33933393
endpoint="/pdf",
33943394
payload=payload,
3395-
payload_model=ConvertUrlsToPdfPayload,
3395+
payload_model=ConvertUrlToPdfPayload,
33963396
extra_query=extra_query,
33973397
extra_headers=extra_headers,
33983398
extra_body=extra_body,
@@ -4951,9 +4951,9 @@ async def convert_html_to_pdf(
49514951
timeout=timeout,
49524952
)
49534953

4954-
async def convert_urls_to_pdf(
4954+
async def convert_url_to_pdf(
49554955
self,
4956-
urls: UrlInput,
4956+
url: UrlValue,
49574957
*,
49584958
output: str | None = None,
49594959
compression: PdfConversionCompression | None = None,
@@ -4967,10 +4967,10 @@ async def convert_urls_to_pdf(
49674967
extra_body: Body | None = None,
49684968
timeout: TimeoutTypes | None = None,
49694969
) -> PdfRestFileBasedResponse:
4970-
"""Asynchronously convert HTML content from one or more URLs to PDF."""
4970+
"""Asynchronously convert HTML content from one URL to PDF."""
49714971

49724972
payload: dict[str, Any] = {
4973-
"url": urls,
4973+
"url": url,
49744974
"output": output,
49754975
"compression": compression,
49764976
"downsample": downsample,
@@ -4984,7 +4984,7 @@ async def convert_urls_to_pdf(
49844984
return await self._post_file_operation(
49854985
endpoint="/pdf",
49864986
payload=payload,
4987-
payload_model=ConvertUrlsToPdfPayload,
4987+
payload_model=ConvertUrlToPdfPayload,
49884988
extra_query=extra_query,
49894989
extra_headers=extra_headers,
49904990
extra_body=extra_body,

src/pdfrest/models/_internal.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -744,14 +744,12 @@ class ConvertHtmlToPdfPayload(BaseModel):
744744
] = None
745745

746746

747-
class ConvertUrlsToPdfPayload(BaseModel):
748-
"""Adapt caller options into a pdfRest-ready convert-to-pdf payload for URLs."""
747+
class ConvertUrlToPdfPayload(BaseModel):
748+
"""Adapt caller options into a pdfRest-ready convert-to-pdf payload for one URL."""
749749

750750
url: Annotated[
751-
list[HttpUrl],
752-
Field(serialization_alias="url", min_length=1),
753-
BeforeValidator(_list_of_strings),
754-
BeforeValidator(_ensure_list),
751+
HttpUrl,
752+
Field(serialization_alias="url"),
755753
]
756754
output: Annotated[
757755
str | None,

tests/live/test_live_convert_urls_to_pdf.py

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,19 @@
44

55
from pdfrest import AsyncPdfRestClient, PdfRestApiError, PdfRestClient
66

7-
from ..resources import get_test_resource_path
8-
9-
10-
@pytest.fixture(scope="module")
11-
def uploaded_html_url_for_pdf(
12-
pdfrest_api_key: str,
13-
pdfrest_live_base_url: str,
14-
) -> str:
15-
resource = get_test_resource_path("sample.html")
16-
with PdfRestClient(
17-
api_key=pdfrest_api_key,
18-
base_url=pdfrest_live_base_url,
19-
) as client:
20-
uploaded = client.files.create_from_paths([resource])[0]
21-
return str(uploaded.url)
7+
LIVE_HTML_URL = "https://example.com"
228

239

2410
def test_live_convert_urls_to_pdf_success(
2511
pdfrest_api_key: str,
2612
pdfrest_live_base_url: str,
27-
uploaded_html_url_for_pdf: str,
2813
) -> None:
2914
with PdfRestClient(
3015
api_key=pdfrest_api_key,
3116
base_url=pdfrest_live_base_url,
3217
) as client:
33-
response = client.convert_urls_to_pdf(
34-
[uploaded_html_url_for_pdf],
18+
response = client.convert_url_to_pdf(
19+
LIVE_HTML_URL,
3520
output="live-html-url",
3621
page_size="letter",
3722
page_margin="8mm",
@@ -52,14 +37,13 @@ def test_live_convert_urls_to_pdf_success(
5237
async def test_live_async_convert_urls_to_pdf_invalid_page_size(
5338
pdfrest_api_key: str,
5439
pdfrest_live_base_url: str,
55-
uploaded_html_url_for_pdf: str,
5640
) -> None:
5741
async with AsyncPdfRestClient(
5842
api_key=pdfrest_api_key,
5943
base_url=pdfrest_live_base_url,
6044
) as client:
6145
with pytest.raises(PdfRestApiError, match=r"(?i)page_size|page size"):
62-
await client.convert_urls_to_pdf(
63-
[uploaded_html_url_for_pdf],
46+
await client.convert_url_to_pdf(
47+
LIVE_HTML_URL,
6448
extra_body={"page_size": "poster"},
6549
)

tests/test_convert_urls_to_pdf.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@
88

99
from pdfrest import AsyncPdfRestClient, PdfRestClient
1010
from pdfrest.models import PdfRestFileBasedResponse, PdfRestFileID
11-
from pdfrest.models._internal import ConvertUrlsToPdfPayload
11+
from pdfrest.models._internal import ConvertUrlToPdfPayload
1212

1313
from .graphics_test_helpers import ASYNC_API_KEY, VALID_API_KEY, build_file_info_payload
1414

1515

1616
def test_convert_urls_to_pdf_success(monkeypatch: pytest.MonkeyPatch) -> None:
1717
monkeypatch.delenv("PDFREST_API_KEY", raising=False)
18-
urls = ["https://example.com/page"]
18+
url = "https://example.com/page"
1919
output_id = str(PdfRestFileID.generate())
20-
payload_dump = ConvertUrlsToPdfPayload.model_validate(
20+
payload_dump = ConvertUrlToPdfPayload.model_validate(
2121
{
22-
"url": urls,
22+
"url": url,
2323
"output": "url-out",
2424
"page_size": "letter",
2525
"page_margin": "2.5in",
@@ -52,8 +52,8 @@ def handler(request: httpx.Request) -> httpx.Response:
5252

5353
transport = httpx.MockTransport(handler)
5454
with PdfRestClient(api_key=VALID_API_KEY, transport=transport) as client:
55-
response = client.convert_urls_to_pdf(
56-
urls,
55+
response = client.convert_url_to_pdf(
56+
url,
5757
output="url-out",
5858
page_size="letter",
5959
page_margin="2.5in",
@@ -68,11 +68,11 @@ def handler(request: httpx.Request) -> httpx.Response:
6868

6969
def test_convert_urls_to_pdf_validation_errors() -> None:
7070
with pytest.raises(ValidationError, match="Input should be a valid URL"):
71-
ConvertUrlsToPdfPayload.model_validate({"url": "not-a-url"})
71+
ConvertUrlToPdfPayload.model_validate({"url": "not-a-url"})
7272

7373
with pytest.raises(ValidationError, match="page_margin must be a number"):
74-
ConvertUrlsToPdfPayload.model_validate(
75-
{"url": ["https://example.com"], "page_margin": "mm"}
74+
ConvertUrlToPdfPayload.model_validate(
75+
{"url": "https://example.com", "page_margin": "mm"}
7676
)
7777

7878

@@ -81,7 +81,7 @@ async def test_async_convert_urls_to_pdf_request_customization(
8181
monkeypatch: pytest.MonkeyPatch,
8282
) -> None:
8383
monkeypatch.delenv("PDFREST_API_KEY", raising=False)
84-
urls = ["https://example.com/page", "https://example.com/other"]
84+
url = "https://example.com/page"
8585
output_id = str(PdfRestFileID.generate())
8686
captured_timeout: dict[str, float | dict[str, float] | None] = {}
8787

@@ -91,7 +91,7 @@ def handler(request: httpx.Request) -> httpx.Response:
9191
assert request.headers["X-Debug"] == "async"
9292
captured_timeout["value"] = request.extensions.get("timeout")
9393
payload = json.loads(request.content.decode("utf-8"))
94-
assert payload["url"] == urls
94+
assert payload["url"] == url
9595
assert payload["output"] == "async-url"
9696
assert payload["page_orientation"] == "portrait"
9797
assert payload["debug"] == "yes"
@@ -116,8 +116,8 @@ def handler(request: httpx.Request) -> httpx.Response:
116116

117117
transport = httpx.MockTransport(handler)
118118
async with AsyncPdfRestClient(api_key=ASYNC_API_KEY, transport=transport) as client:
119-
response = await client.convert_urls_to_pdf(
120-
urls,
119+
response = await client.convert_url_to_pdf(
120+
url,
121121
output="async-url",
122122
page_orientation="portrait",
123123
extra_query={"trace": "async"},

0 commit comments

Comments
 (0)