1
- from typing import Iterable , Union
1
+ from typing import Optional , Union
2
2
3
3
import requests
4
4
5
- from .base_types import Config , Language , LanguageAlias
5
+ from .base_types import Config , Iterable , Language , LanguageAlias
6
6
from .data import LANGUAGE_TO_LANGUAGE_ID
7
+ from .retry import RetryStrategy
7
8
from .submission import Submission , Submissions
8
9
9
10
10
11
class Client :
11
- API_KEY_ENV = "JUDGE0_API_KEY"
12
- DEFAULT_MAX_SUBMISSION_BATCH_SIZE = 20
13
- ENABLED_BATCHED_SUBMISSIONS = True
14
- EFFECTIVE_SUBMISSION_BATCH_SIZE = (
15
- DEFAULT_MAX_SUBMISSION_BATCH_SIZE if ENABLED_BATCHED_SUBMISSIONS else 1
16
- )
12
+ API_KEY_ENV = None
17
13
18
- def __init__ (self , endpoint , auth_headers ) -> None :
14
+ def __init__ (
15
+ self ,
16
+ endpoint ,
17
+ auth_headers ,
18
+ * ,
19
+ retry_strategy : Optional [RetryStrategy ] = None ,
20
+ ) -> None :
19
21
self .endpoint = endpoint
20
22
self .auth_headers = auth_headers
23
+ self .retry_strategy = retry_strategy
21
24
22
25
try :
23
- self .languages = [ Language (** lang ) for lang in self .get_languages ()]
26
+ self .languages = tuple ( Language (** lang ) for lang in self .get_languages ())
24
27
self .config = Config (** self .get_config_info ())
25
28
except Exception as e :
26
29
raise RuntimeError (
@@ -113,7 +116,7 @@ def get_submission(
113
116
self ,
114
117
submission : Submission ,
115
118
* ,
116
- fields : Union [str , Iterable [str ], None ] = None ,
119
+ fields : Optional [ Union [str , Iterable [str ]] ] = None ,
117
120
) -> Submission :
118
121
"""Check the submission status."""
119
122
@@ -168,7 +171,7 @@ def get_submissions(
168
171
self ,
169
172
submissions : Submissions ,
170
173
* ,
171
- fields : Union [str , Iterable [str ], None ] = None ,
174
+ fields : Optional [ Union [str , Iterable [str ]] ] = None ,
172
175
) -> Submissions :
173
176
params = {
174
177
"base64_encoded" : "true" ,
@@ -201,14 +204,15 @@ def get_submissions(
201
204
class ATD (Client ):
202
205
API_KEY_ENV = "JUDGE0_ATD_API_KEY"
203
206
204
- def __init__ (self , endpoint , host_header_value , api_key ):
207
+ def __init__ (self , endpoint , host_header_value , api_key , ** kwargs ):
205
208
self .api_key = api_key
206
209
super ().__init__ (
207
210
endpoint ,
208
211
{
209
212
"x-apihub-host" : host_header_value ,
210
213
"x-apihub-key" : api_key ,
211
214
},
215
+ ** kwargs ,
212
216
)
213
217
214
218
def _update_endpoint_header (self , header_value ):
@@ -232,11 +236,12 @@ class ATDJudge0CE(ATD):
232
236
DEFAULT_CREATE_SUBMISSIONS_ENDPOINT : str = "402b857c-1126-4450-bfd8-22e1f2cbff2f"
233
237
DEFAULT_GET_SUBMISSIONS_ENDPOINT : str = "e42f2a26-5b02-472a-80c9-61c4bdae32ec"
234
238
235
- def __init__ (self , api_key ):
239
+ def __init__ (self , api_key , ** kwargs ):
236
240
super ().__init__ (
237
241
self .DEFAULT_ENDPOINT ,
238
242
self .DEFAULT_HOST ,
239
243
api_key ,
244
+ ** kwargs ,
240
245
)
241
246
242
247
def get_about (self ) -> dict :
@@ -267,7 +272,7 @@ def get_submission(
267
272
self ,
268
273
submission : Submission ,
269
274
* ,
270
- fields : Union [str , Iterable [str ], None ] = None ,
275
+ fields : Optional [ Union [str , Iterable [str ]] ] = None ,
271
276
) -> Submission :
272
277
self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSION_ENDPOINT )
273
278
return super ().get_submission (submission , fields = fields )
@@ -280,7 +285,7 @@ def get_submissions(
280
285
self ,
281
286
submissions : Submissions ,
282
287
* ,
283
- fields : Union [str , Iterable [str ], None ] = None ,
288
+ fields : Optional [ Union [str , Iterable [str ]] ] = None ,
284
289
) -> Submissions :
285
290
self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSIONS_ENDPOINT )
286
291
return super ().get_submissions (submissions , fields = fields )
@@ -303,11 +308,12 @@ class ATDJudge0ExtraCE(ATD):
303
308
DEFAULT_CREATE_SUBMISSIONS_ENDPOINT : str = "c64df5d3-edfd-4b08-8687-561af2f80d2f"
304
309
DEFAULT_GET_SUBMISSIONS_ENDPOINT : str = "5d173718-8e6a-4cf5-9d8c-db5e6386d037"
305
310
306
- def __init__ (self , api_key ):
311
+ def __init__ (self , api_key , ** kwargs ):
307
312
super ().__init__ (
308
313
self .DEFAULT_ENDPOINT ,
309
314
self .DEFAULT_HOST ,
310
315
api_key ,
316
+ ** kwargs ,
311
317
)
312
318
313
319
def get_about (self ) -> dict :
@@ -338,7 +344,7 @@ def get_submission(
338
344
self ,
339
345
submission : Submission ,
340
346
* ,
341
- fields : Union [str , Iterable [str ], None ] = None ,
347
+ fields : Optional [ Union [str , Iterable [str ]] ] = None ,
342
348
) -> Submission :
343
349
self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSION_ENDPOINT )
344
350
return super ().get_submission (submission , fields = fields )
@@ -351,7 +357,7 @@ def get_submissions(
351
357
self ,
352
358
submissions : Submissions ,
353
359
* ,
354
- fields : Union [str , Iterable [str ], None ] = None ,
360
+ fields : Optional [ Union [str , Iterable [str ]] ] = None ,
355
361
) -> Submissions :
356
362
self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSIONS_ENDPOINT )
357
363
return super ().get_submissions (submissions , fields = fields )
@@ -360,14 +366,15 @@ def get_submissions(
360
366
class Rapid (Client ):
361
367
API_KEY_ENV = "JUDGE0_RAPID_API_KEY"
362
368
363
- def __init__ (self , endpoint , host_header_value , api_key ):
369
+ def __init__ (self , endpoint , host_header_value , api_key , ** kwargs ):
364
370
self .api_key = api_key
365
371
super ().__init__ (
366
372
endpoint ,
367
373
{
368
374
"x-rapidapi-host" : host_header_value ,
369
375
"x-rapidapi-key" : api_key ,
370
376
},
377
+ ** kwargs ,
371
378
)
372
379
373
380
@@ -376,11 +383,12 @@ class RapidJudge0CE(Rapid):
376
383
DEFAULT_HOST : str = "judge0-ce.p.rapidapi.com"
377
384
HOME_URL : str = "https://rapidapi.com/judge0-official/api/judge0-ce"
378
385
379
- def __init__ (self , api_key ):
386
+ def __init__ (self , api_key , ** kwargs ):
380
387
super ().__init__ (
381
388
self .DEFAULT_ENDPOINT ,
382
389
self .DEFAULT_HOST ,
383
390
api_key ,
391
+ ** kwargs ,
384
392
)
385
393
386
394
@@ -389,40 +397,46 @@ class RapidJudge0ExtraCE(Rapid):
389
397
DEFAULT_HOST : str = "judge0-extra-ce.p.rapidapi.com"
390
398
HOME_URL : str = "https://rapidapi.com/judge0-official/api/judge0-extra-ce"
391
399
392
- def __init__ (self , api_key ):
400
+ def __init__ (self , api_key , ** kwargs ):
393
401
super ().__init__ (
394
402
self .DEFAULT_ENDPOINT ,
395
403
self .DEFAULT_HOST ,
396
404
api_key ,
405
+ ** kwargs ,
397
406
)
398
407
399
408
400
409
class Sulu (Client ):
401
410
API_KEY_ENV = "JUDGE0_SULU_API_KEY"
402
411
403
- def __init__ (self , endpoint , api_key = None ):
412
+ def __init__ (self , endpoint , api_key = None , ** kwargs ):
404
413
self .api_key = api_key
405
414
super ().__init__ (
406
415
endpoint ,
407
416
{"Authorization" : f"Bearer { api_key } " } if api_key else None ,
417
+ ** kwargs ,
408
418
)
409
419
410
420
411
421
class SuluJudge0CE (Sulu ):
412
422
DEFAULT_ENDPOINT : str = "https://judge0-ce.p.sulu.sh"
413
423
HOME_URL : str = "https://sparkhub.sulu.sh/apis/judge0/judge0-ce/readme"
414
424
415
- def __init__ (self , api_key = None ):
416
- super ().__init__ (self .DEFAULT_ENDPOINT , api_key )
425
+ def __init__ (self , api_key = None , ** kwargs ):
426
+ super ().__init__ (
427
+ self .DEFAULT_ENDPOINT ,
428
+ api_key ,
429
+ ** kwargs ,
430
+ )
417
431
418
432
419
433
class SuluJudge0ExtraCE (Sulu ):
420
434
DEFAULT_ENDPOINT : str = "https://judge0-extra-ce.p.sulu.sh"
421
435
HOME_URL : str = "https://sparkhub.sulu.sh/apis/judge0/judge0-extra-ce/readme"
422
436
423
- def __init__ (self , api_key = None ):
424
- super ().__init__ (self .DEFAULT_ENDPOINT , api_key )
437
+ def __init__ (self , api_key = None , ** kwargs ):
438
+ super ().__init__ (self .DEFAULT_ENDPOINT , api_key , ** kwargs )
425
439
426
440
427
- CE = [ RapidJudge0CE , SuluJudge0CE , ATDJudge0CE ]
428
- EXTRA_CE = [ RapidJudge0ExtraCE , SuluJudge0ExtraCE , ATDJudge0ExtraCE ]
441
+ CE = ( RapidJudge0CE , SuluJudge0CE , ATDJudge0CE )
442
+ EXTRA_CE = ( RapidJudge0ExtraCE , SuluJudge0ExtraCE , ATDJudge0ExtraCE )
0 commit comments