21
21
22
22
import playwright ._impl ._network as network
23
23
from playwright ._impl ._api_structures import (
24
+ ClientCertificate ,
24
25
FilePayload ,
25
26
FormField ,
26
27
Headers ,
42
43
object_to_array ,
43
44
to_impl ,
44
45
)
45
- from playwright ._impl ._network import serialize_headers
46
+ from playwright ._impl ._network import serialize_headers , to_client_certificates_protocol
46
47
from playwright ._impl ._tracing import Tracing
47
48
48
49
if typing .TYPE_CHECKING :
@@ -71,6 +72,7 @@ async def new_context(
71
72
userAgent : str = None ,
72
73
timeout : float = None ,
73
74
storageState : Union [StorageState , str , Path ] = None ,
75
+ clientCertificates : List [ClientCertificate ] = None ,
74
76
) -> "APIRequestContext" :
75
77
params = locals_to_params (locals ())
76
78
if "storageState" in params :
@@ -81,6 +83,9 @@ async def new_context(
81
83
)
82
84
if "extraHTTPHeaders" in params :
83
85
params ["extraHTTPHeaders" ] = serialize_headers (params ["extraHTTPHeaders" ])
86
+ params ["clientCertificates" ] = await to_client_certificates_protocol (
87
+ params .get ("clientCertificates" )
88
+ )
84
89
context = cast (
85
90
APIRequestContext ,
86
91
from_channel (await self .playwright ._channel .send ("newRequest" , params )),
@@ -118,6 +123,7 @@ async def delete(
118
123
failOnStatusCode : bool = None ,
119
124
ignoreHTTPSErrors : bool = None ,
120
125
maxRedirects : int = None ,
126
+ maxRetries : int = None ,
121
127
) -> "APIResponse" :
122
128
return await self .fetch (
123
129
url ,
@@ -131,6 +137,7 @@ async def delete(
131
137
failOnStatusCode = failOnStatusCode ,
132
138
ignoreHTTPSErrors = ignoreHTTPSErrors ,
133
139
maxRedirects = maxRedirects ,
140
+ maxRetries = maxRetries ,
134
141
)
135
142
136
143
async def head (
@@ -145,6 +152,7 @@ async def head(
145
152
failOnStatusCode : bool = None ,
146
153
ignoreHTTPSErrors : bool = None ,
147
154
maxRedirects : int = None ,
155
+ maxRetries : int = None ,
148
156
) -> "APIResponse" :
149
157
return await self .fetch (
150
158
url ,
@@ -158,6 +166,7 @@ async def head(
158
166
failOnStatusCode = failOnStatusCode ,
159
167
ignoreHTTPSErrors = ignoreHTTPSErrors ,
160
168
maxRedirects = maxRedirects ,
169
+ maxRetries = maxRetries ,
161
170
)
162
171
163
172
async def get (
@@ -172,6 +181,7 @@ async def get(
172
181
failOnStatusCode : bool = None ,
173
182
ignoreHTTPSErrors : bool = None ,
174
183
maxRedirects : int = None ,
184
+ maxRetries : int = None ,
175
185
) -> "APIResponse" :
176
186
return await self .fetch (
177
187
url ,
@@ -185,6 +195,7 @@ async def get(
185
195
failOnStatusCode = failOnStatusCode ,
186
196
ignoreHTTPSErrors = ignoreHTTPSErrors ,
187
197
maxRedirects = maxRedirects ,
198
+ maxRetries = maxRetries ,
188
199
)
189
200
190
201
async def patch (
@@ -199,6 +210,7 @@ async def patch(
199
210
failOnStatusCode : bool = None ,
200
211
ignoreHTTPSErrors : bool = None ,
201
212
maxRedirects : int = None ,
213
+ maxRetries : int = None ,
202
214
) -> "APIResponse" :
203
215
return await self .fetch (
204
216
url ,
@@ -212,6 +224,7 @@ async def patch(
212
224
failOnStatusCode = failOnStatusCode ,
213
225
ignoreHTTPSErrors = ignoreHTTPSErrors ,
214
226
maxRedirects = maxRedirects ,
227
+ maxRetries = maxRetries ,
215
228
)
216
229
217
230
async def put (
@@ -226,6 +239,7 @@ async def put(
226
239
failOnStatusCode : bool = None ,
227
240
ignoreHTTPSErrors : bool = None ,
228
241
maxRedirects : int = None ,
242
+ maxRetries : int = None ,
229
243
) -> "APIResponse" :
230
244
return await self .fetch (
231
245
url ,
@@ -239,6 +253,7 @@ async def put(
239
253
failOnStatusCode = failOnStatusCode ,
240
254
ignoreHTTPSErrors = ignoreHTTPSErrors ,
241
255
maxRedirects = maxRedirects ,
256
+ maxRetries = maxRetries ,
242
257
)
243
258
244
259
async def post (
@@ -253,6 +268,7 @@ async def post(
253
268
failOnStatusCode : bool = None ,
254
269
ignoreHTTPSErrors : bool = None ,
255
270
maxRedirects : int = None ,
271
+ maxRetries : int = None ,
256
272
) -> "APIResponse" :
257
273
return await self .fetch (
258
274
url ,
@@ -266,6 +282,7 @@ async def post(
266
282
failOnStatusCode = failOnStatusCode ,
267
283
ignoreHTTPSErrors = ignoreHTTPSErrors ,
268
284
maxRedirects = maxRedirects ,
285
+ maxRetries = maxRetries ,
269
286
)
270
287
271
288
async def fetch (
@@ -281,6 +298,7 @@ async def fetch(
281
298
failOnStatusCode : bool = None ,
282
299
ignoreHTTPSErrors : bool = None ,
283
300
maxRedirects : int = None ,
301
+ maxRetries : int = None ,
284
302
) -> "APIResponse" :
285
303
url = urlOrRequest if isinstance (urlOrRequest , str ) else None
286
304
request = (
@@ -304,6 +322,7 @@ async def fetch(
304
322
failOnStatusCode ,
305
323
ignoreHTTPSErrors ,
306
324
maxRedirects ,
325
+ maxRetries ,
307
326
)
308
327
309
328
async def _inner_fetch (
@@ -320,6 +339,7 @@ async def _inner_fetch(
320
339
failOnStatusCode : bool = None ,
321
340
ignoreHTTPSErrors : bool = None ,
322
341
maxRedirects : int = None ,
342
+ maxRetries : int = None ,
323
343
) -> "APIResponse" :
324
344
if self ._close_reason :
325
345
raise TargetClosedError (self ._close_reason )
@@ -329,6 +349,9 @@ async def _inner_fetch(
329
349
assert (
330
350
maxRedirects is None or maxRedirects >= 0
331
351
), "'max_redirects' must be greater than or equal to '0'"
352
+ assert (
353
+ maxRetries is None or maxRetries >= 0
354
+ ), "'max_retries' must be greater than or equal to '0'"
332
355
url = url or (request .url if request else url )
333
356
method = method or (request .method if request else "GET" )
334
357
# Cannot call allHeaders() here as the request may be paused inside route handler.
@@ -392,6 +415,7 @@ async def _inner_fetch(
392
415
"failOnStatusCode" : failOnStatusCode ,
393
416
"ignoreHTTPSErrors" : ignoreHTTPSErrors ,
394
417
"maxRedirects" : maxRedirects ,
418
+ "maxRetries" : maxRetries ,
395
419
},
396
420
)
397
421
return APIResponse (self , response )
0 commit comments