@@ -53,6 +53,7 @@ class Payload(pydantic.BaseModel):
53
53
document_url : str | None = None
54
54
## Browse the document in a browser before rendering
55
55
browser_url : str | None = None
56
+ browser_launch_kwargs : dict [str , Any ] = pydantic .Field (default_factory = dict )
56
57
browser_headers : dict = pydantic .Field (default_factory = dict )
57
58
browser_context : dict = pydantic .Field (default_factory = dict )
58
59
browser_pdf_options : Mapping [str , Any ] = pydantic .Field (default_factory = dict )
@@ -98,8 +99,14 @@ def init() -> None:
98
99
99
100
100
101
@contextmanager
101
- def _playwright_visit_page (browser_url : str , headers : dict , context : dict ) -> Iterator [playwright .sync_api .Page ]:
102
+ def _playwright_visit_page (
103
+ browser_url : str ,
104
+ headers : dict ,
105
+ context : dict ,
106
+ browser_launch_kwargs : dict [str , Any ],
107
+ ) -> Iterator [playwright .sync_api .Page ]:
102
108
print ("splat|playwright_handler|url=" , browser_url )
109
+
103
110
with sync_playwright () as p :
104
111
browser = p .chromium .launch (
105
112
headless = True ,
@@ -143,6 +150,7 @@ def _playwright_visit_page(browser_url: str, headers: dict, context: dict) -> It
143
150
"--use-gl=swiftshader" ,
144
151
"--use-mock-keychain" ,
145
152
],
153
+ ** browser_launch_kwargs ,
146
154
)
147
155
context = browser .new_context (** context )
148
156
context .set_extra_http_headers (headers )
@@ -160,13 +168,19 @@ def playwright_page_to_pdf(
160
168
output_filepath : str ,
161
169
pdf_options : Mapping [str , str ],
162
170
context : dict ,
171
+ browser_launch_kwargs : dict [str , Any ],
163
172
) -> None :
164
- with _playwright_visit_page (browser_url , headers , context ) as page :
173
+ with _playwright_visit_page (browser_url , headers , context , browser_launch_kwargs ) as page :
165
174
page .pdf (path = output_filepath , ** pdf_options )
166
175
167
176
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 :
177
+ def playwright_page_to_html_string (
178
+ browser_url : str ,
179
+ headers : dict ,
180
+ context : dict ,
181
+ browser_launch_kwargs : dict [str , Any ],
182
+ ) -> str :
183
+ with _playwright_visit_page (browser_url , headers , context , browser_launch_kwargs ) as page :
170
184
return page .content ()
171
185
172
186
@@ -186,6 +200,7 @@ def pdf_from_document_content(payload: Payload, output_filepath: str) -> None:
186
200
output_filepath ,
187
201
payload .browser_pdf_options ,
188
202
payload .browser_context ,
203
+ payload .browser_launch_kwargs ,
189
204
)
190
205
191
206
@@ -210,6 +225,7 @@ def pdf_from_document_url(payload: Payload, output_filepath: str) -> None:
210
225
output_filepath ,
211
226
payload .browser_pdf_options ,
212
227
payload .browser_context ,
228
+ payload .browser_launch_kwargs ,
213
229
)
214
230
215
231
@@ -219,7 +235,9 @@ def pdf_from_browser_url(payload: Payload, output_filepath: str) -> None:
219
235
# First we need to visit the browser with playwright and save the html
220
236
assert payload .browser_url
221
237
if payload .renderer == Renderers .princexml :
222
- html = playwright_page_to_html_string (payload .browser_url , payload .browser_headers , payload .browser_context )
238
+ html = playwright_page_to_html_string (
239
+ payload .browser_url , payload .browser_headers , payload .browser_context , payload .browser_launch_kwargs
240
+ )
223
241
pdf_from_document_content (
224
242
Payload (document_content = html , renderer = Renderers .princexml ),
225
243
output_filepath ,
@@ -231,6 +249,7 @@ def pdf_from_browser_url(payload: Payload, output_filepath: str) -> None:
231
249
output_filepath ,
232
250
payload .browser_pdf_options ,
233
251
payload .browser_context ,
252
+ payload .browser_launch_kwargs ,
234
253
)
235
254
236
255
0 commit comments