@@ -54,6 +54,7 @@ class Payload(pydantic.BaseModel):
54
54
## Browse the document in a browser before rendering
55
55
browser_url : str | None = None
56
56
browser_headers : dict = pydantic .Field (default_factory = dict )
57
+ browser_context : dict = pydantic .Field (default_factory = dict )
57
58
browser_pdf_options : Mapping [str , Any ] = pydantic .Field (default_factory = dict )
58
59
renderer : Renderers = Renderers .princexml
59
60
@@ -97,7 +98,7 @@ def init() -> None:
97
98
98
99
99
100
@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 ]:
101
102
print ("splat|playwright_handler|url=" , browser_url )
102
103
with sync_playwright () as p :
103
104
browser = p .chromium .launch (
@@ -143,7 +144,7 @@ def _playwright_visit_page(browser_url: str, headers: dict) -> Iterator[playwrig
143
144
"--use-mock-keychain" ,
144
145
],
145
146
)
146
- context = browser .new_context ()
147
+ context = browser .new_context (** context )
147
148
context .set_extra_http_headers (headers )
148
149
page = context .new_page ()
149
150
page .goto (browser_url , timeout = 1000 * 60 * 10 )
@@ -154,14 +155,18 @@ def _playwright_visit_page(browser_url: str, headers: dict) -> Iterator[playwrig
154
155
155
156
156
157
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 ,
158
163
) -> None :
159
- with _playwright_visit_page (browser_url , headers ) as page :
164
+ with _playwright_visit_page (browser_url , headers , context ) as page :
160
165
page .pdf (path = output_filepath , ** pdf_options )
161
166
162
167
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 :
165
170
return page .content ()
166
171
167
172
@@ -180,6 +185,7 @@ def pdf_from_document_content(payload: Payload, output_filepath: str) -> None:
180
185
payload .browser_headers ,
181
186
output_filepath ,
182
187
payload .browser_pdf_options ,
188
+ payload .browser_context ,
183
189
)
184
190
185
191
@@ -203,6 +209,7 @@ def pdf_from_document_url(payload: Payload, output_filepath: str) -> None:
203
209
payload .browser_headers ,
204
210
output_filepath ,
205
211
payload .browser_pdf_options ,
212
+ payload .browser_context ,
206
213
)
207
214
208
215
@@ -212,7 +219,7 @@ def pdf_from_browser_url(payload: Payload, output_filepath: str) -> None:
212
219
# First we need to visit the browser with playwright and save the html
213
220
assert payload .browser_url
214
221
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 )
216
223
pdf_from_document_content (
217
224
Payload (document_content = html , renderer = Renderers .princexml ),
218
225
output_filepath ,
@@ -223,6 +230,7 @@ def pdf_from_browser_url(payload: Payload, output_filepath: str) -> None:
223
230
payload .browser_headers ,
224
231
output_filepath ,
225
232
payload .browser_pdf_options ,
233
+ payload .browser_context ,
226
234
)
227
235
228
236
0 commit comments