Skip to content

Commit 57eca5d

Browse files
committed
feat(playwright): add context variables to playwright
1 parent 9e7dcc5 commit 57eca5d

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

lambda_function.py

+15-7
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class Payload(pydantic.BaseModel):
5454
## Browse the document in a browser before rendering
5555
browser_url: str | None = None
5656
browser_headers: dict = pydantic.Field(default_factory=dict)
57+
browser_context: dict = pydantic.Field(default_factory=dict)
5758
browser_pdf_options: Mapping[str, Any] = pydantic.Field(default_factory=dict)
5859
renderer: Renderers = Renderers.princexml
5960

@@ -97,7 +98,7 @@ def init() -> None:
9798

9899

99100
@contextmanager
100-
def _playwright_visit_page(browser_url: str, headers: dict) -> Iterator[playwright.sync_api.Page]:
101+
def _playwright_visit_page(browser_url: str, headers: dict, context: dict) -> Iterator[playwright.sync_api.Page]:
101102
print("splat|playwright_handler|url=", browser_url)
102103
with sync_playwright() as p:
103104
browser = p.chromium.launch(
@@ -143,7 +144,7 @@ def _playwright_visit_page(browser_url: str, headers: dict) -> Iterator[playwrig
143144
"--use-mock-keychain",
144145
],
145146
)
146-
context = browser.new_context()
147+
context = browser.new_context(**context)
147148
context.set_extra_http_headers(headers)
148149
page = context.new_page()
149150
page.goto(browser_url, timeout=1000 * 60 * 10)
@@ -154,14 +155,18 @@ def _playwright_visit_page(browser_url: str, headers: dict) -> Iterator[playwrig
154155

155156

156157
def playwright_page_to_pdf(
157-
browser_url: str, headers: dict, output_filepath: str, pdf_options: Mapping[str, str]
158+
browser_url: str,
159+
headers: dict,
160+
output_filepath: str,
161+
pdf_options: Mapping[str, str],
162+
context: dict,
158163
) -> None:
159-
with _playwright_visit_page(browser_url, headers) as page:
164+
with _playwright_visit_page(browser_url, headers, context) as page:
160165
page.pdf(path=output_filepath, **pdf_options)
161166

162167

163-
def playwright_page_to_html_string(browser_url: str, headers: dict) -> str:
164-
with _playwright_visit_page(browser_url, headers) as page:
168+
def playwright_page_to_html_string(browser_url: str, headers: dict, context: dict) -> str:
169+
with _playwright_visit_page(browser_url, headers, context) as page:
165170
return page.content()
166171

167172

@@ -180,6 +185,7 @@ def pdf_from_document_content(payload: Payload, output_filepath: str) -> None:
180185
payload.browser_headers,
181186
output_filepath,
182187
payload.browser_pdf_options,
188+
payload.browser_context,
183189
)
184190

185191

@@ -203,6 +209,7 @@ def pdf_from_document_url(payload: Payload, output_filepath: str) -> None:
203209
payload.browser_headers,
204210
output_filepath,
205211
payload.browser_pdf_options,
212+
payload.browser_context,
206213
)
207214

208215

@@ -212,7 +219,7 @@ def pdf_from_browser_url(payload: Payload, output_filepath: str) -> None:
212219
# First we need to visit the browser with playwright and save the html
213220
assert payload.browser_url
214221
if payload.renderer == Renderers.princexml:
215-
html = playwright_page_to_html_string(payload.browser_url, payload.browser_headers)
222+
html = playwright_page_to_html_string(payload.browser_url, payload.browser_headers, payload.browser_context)
216223
pdf_from_document_content(
217224
Payload(document_content=html, renderer=Renderers.princexml),
218225
output_filepath,
@@ -223,6 +230,7 @@ def pdf_from_browser_url(payload: Payload, output_filepath: str) -> None:
223230
payload.browser_headers,
224231
output_filepath,
225232
payload.browser_pdf_options,
233+
payload.browser_context,
226234
)
227235

228236

0 commit comments

Comments
 (0)