Skip to content

Commit e24c4c8

Browse files
committed
feat(playwright): switch to configurable options
1 parent 6302389 commit e24c4c8

File tree

3 files changed

+23
-16
lines changed

3 files changed

+23
-16
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Event payload body.
2222
| **document_url** | url | Fetch the html content from `document_url` to disk before rendering. |
2323
| **browser_url** | url | Browser the `browser_url` with `playwright` before rendering with `renderer` |
2424
| **browser_headers** | Mapping[str,str] | Add additional headers to playwright before visiting `browser_url` |
25-
| **browser_papersize** | `A4` or `Letter` | Size of the page when creating PDF with playwright | |
25+
| **browser_pdf_options** | Mapping[str,str] | Add additional options to playwright `.pdf()` call | |
2626
| **renderer** | `princexml` or `playwright` | Renderer to render the html with |
2727
| **bucket_name** | string | Output the resulting pdf to `s3://{bucket_name}/{uuid}.pdf`. The lambda will require permission to upload to the bucket. The response will include `bucket`, `key`, `presigned_url` |
2828
| **presigned_url** | url | Output the resulting pdf to the presigned url. Generate the presigned url with `put_object`. See Output for more information. |

lambda_function.py

+7-12
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import tempfile
99
import uuid
1010
import xml.etree.ElementTree as ET
11-
from collections.abc import Iterator
11+
from collections.abc import Iterator, Mapping
1212
from contextlib import contextmanager
1313
from dataclasses import dataclass, field
1414
from urllib.parse import urlparse
@@ -39,11 +39,6 @@ class Renderers(str, enum.Enum):
3939
princexml = "princexml"
4040

4141

42-
class Papersize(str, enum.Enum):
43-
A4 = "A4"
44-
Letter = "Letter"
45-
46-
4742
class Payload(pydantic.BaseModel):
4843
# NOTE: When updating this model, also update the equivalent documentation
4944
# General Parameters
@@ -58,7 +53,7 @@ class Payload(pydantic.BaseModel):
5853
## Browse the document in a browser before rendering
5954
browser_url: str | None = None
6055
browser_headers: dict = pydantic.Field(default_factory=dict)
61-
browser_papersize: Papersize = Papersize.A4
56+
browser_pdf_options: Mapping[str, str] = pydantic.Field(default_factory=dict)
6257
renderer: Renderers = Renderers.princexml
6358

6459
# Output parameters
@@ -158,10 +153,10 @@ def _playwright_visit_page(browser_url: str, headers: dict) -> Iterator[playwrig
158153

159154

160155
def playwright_page_to_pdf(
161-
browser_url: str, headers: dict, output_filepath: str, papersize: Papersize = Papersize.A4
156+
browser_url: str, headers: dict, output_filepath: str, pdf_options: Mapping[str, str]
162157
) -> None:
163158
with _playwright_visit_page(browser_url, headers) as page:
164-
page.pdf(path=output_filepath, format=papersize)
159+
page.pdf(path=output_filepath, **pdf_options)
165160

166161

167162
def playwright_page_to_html_string(browser_url: str, headers: dict) -> str:
@@ -183,7 +178,7 @@ def pdf_from_document_content(payload: Payload, output_filepath: str) -> None:
183178
f"file://{temporary_html_file.name}",
184179
payload.browser_headers,
185180
output_filepath,
186-
payload.browser_papersize,
181+
payload.browser_pdf_options,
187182
)
188183

189184

@@ -206,7 +201,7 @@ def pdf_from_document_url(payload: Payload, output_filepath: str) -> None:
206201
f"file://{temporary_html_file.name}",
207202
payload.browser_headers,
208203
output_filepath,
209-
payload.browser_papersize,
204+
payload.browser_pdf_options,
210205
)
211206

212207

@@ -226,7 +221,7 @@ def pdf_from_browser_url(payload: Payload, output_filepath: str) -> None:
226221
payload.browser_url,
227222
payload.browser_headers,
228223
output_filepath,
229-
payload.browser_papersize,
224+
payload.browser_pdf_options,
230225
)
231226

232227

tests/test_lambda_e2e.py

+15-3
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ def test_generating_pdf_from_document_url(self, renderer: str, browser_papersize
6868
)
6969

7070
status_code, _, pdf_body = call_lamdba(
71-
{"document_url": document_url, "renderer": renderer, "browser_papersize": browser_papersize},
71+
{
72+
"document_url": document_url,
73+
"renderer": renderer,
74+
"browser_pdf_options": {"format": browser_papersize},
75+
},
7276
)
7377

7478
assert b"Z" in pdf_body
@@ -77,15 +81,23 @@ def test_generating_pdf_from_document_url(self, renderer: str, browser_papersize
7781
def test_generating_pdf_from_document_content(self, renderer: str, browser_papersize: str):
7882
"""Send an embedded html document and receive the pdf bytes for it"""
7983
status_code, _, pdf_body = call_lamdba(
80-
{"document_content": "<h1>Z</h1>", "renderer": renderer, "browser_papersize": browser_papersize},
84+
{
85+
"document_content": "<h1>Z</h1>",
86+
"renderer": renderer,
87+
"browser_pdf_options": {"format": browser_papersize},
88+
},
8189
)
8290

8391
assert b"Z" in pdf_body
8492
assert status_code == 200
8593

8694
def test_generating_pdf_from_browser_url(self, renderer: str, browser_papersize: str):
8795
status_code, _, pdf_body = call_lamdba(
88-
{"browser_url": "http://google.com", "renderer": renderer, "browser_papersize": browser_papersize},
96+
{
97+
"browser_url": "http://google.com",
98+
"renderer": renderer,
99+
"browser_pdf_options": {"format": browser_papersize},
100+
},
89101
)
90102

91103
assert b"Z" in pdf_body

0 commit comments

Comments
 (0)