@@ -55,7 +55,7 @@ def get_statuses(self) -> list[dict]:
55
55
def is_language_supported (self , language_id : int ) -> bool :
56
56
return language_id in self .languages
57
57
58
- def create_submission (self , submission : Submission ) -> None :
58
+ def create_submission (self , submission : Submission ) -> Submission :
59
59
# Check if submission contains supported language.
60
60
if not self .is_language_supported (language_id = submission .language_id ):
61
61
raise RuntimeError (
@@ -80,12 +80,14 @@ def create_submission(self, submission: Submission) -> None:
80
80
81
81
submission .set_attributes (resp .json ())
82
82
83
+ return submission
84
+
83
85
def get_submission (
84
86
self ,
85
87
submission : Submission ,
86
88
* ,
87
89
fields : Union [str , Iterable [str ], None ] = None ,
88
- ) -> None :
90
+ ) -> Submission :
89
91
"""Check the submission status."""
90
92
91
93
params = {
@@ -109,7 +111,9 @@ def get_submission(
109
111
110
112
submission .set_attributes (resp .json ())
111
113
112
- def create_submissions (self , submissions : list [Submission ]) -> None :
114
+ return submission
115
+
116
+ def create_submissions (self , submissions : list [Submission ]) -> list [Submission ]:
113
117
# Check if all submissions contain supported language.
114
118
for submission in submissions :
115
119
if not self .is_language_supported (language_id = submission .language_id ):
@@ -131,12 +135,14 @@ def create_submissions(self, submissions: list[Submission]) -> None:
131
135
for submission , attrs in zip (submissions , resp .json ()):
132
136
submission .set_attributes (attrs )
133
137
138
+ return submissions
139
+
134
140
def get_submissions (
135
141
self ,
136
142
submissions : list [Submission ],
137
143
* ,
138
144
fields : Union [str , Iterable [str ], None ] = None ,
139
- ) -> None :
145
+ ) -> list [ Submission ] :
140
146
params = {
141
147
"base64_encoded" : "true" ,
142
148
}
@@ -162,35 +168,7 @@ def get_submissions(
162
168
for submission , attrs in zip (submissions , resp .json ()["submissions" ]):
163
169
submission .set_attributes (attrs )
164
170
165
- def wait (
166
- self ,
167
- submissions : Union [Submission , list [Submission ]],
168
- * ,
169
- retry_mechanism : Optional [RetryMechanism ] = None ,
170
- ):
171
- if retry_mechanism is None :
172
- retry_mechanism = RegularPeriodRetry ()
173
-
174
- if not isinstance (submissions , (list , tuple )):
175
- submissions = [submissions ]
176
-
177
- submissions_to_check = {
178
- submission .token : submission for submission in submissions
179
- }
180
-
181
- while len (submissions_to_check ) > 0 and not retry_mechanism .is_done ():
182
- self .get_submissions (submissions_to_check .values ())
183
- for token in list (submissions_to_check ):
184
- submission = submissions_to_check [token ]
185
- if submission .is_done ():
186
- submissions_to_check .pop (token )
187
-
188
- # Don't wait if there is no submissions to check for anymore.
189
- if len (submissions_to_check ) == 0 :
190
- break
191
-
192
- retry_mechanism .wait ()
193
- retry_mechanism .step ()
171
+ return submissions
194
172
195
173
196
174
class ATD (Client ):
@@ -249,7 +227,7 @@ def get_statuses(self) -> list[dict]:
249
227
self ._update_endpoint_header (self .DEFAULT_STATUSES_ENDPOINT )
250
228
return super ().get_statuses ()
251
229
252
- def create_submission (self , submission : Submission ) -> None :
230
+ def create_submission (self , submission : Submission ) -> Submission :
253
231
self ._update_endpoint_header (self .DEFAULT_CREATE_SUBMISSION_ENDPOINT )
254
232
return super ().create_submission (submission )
255
233
@@ -258,11 +236,11 @@ def get_submission(
258
236
submission : Submission ,
259
237
* ,
260
238
fields : Union [str , Iterable [str ], None ] = None ,
261
- ) -> None :
239
+ ) -> Submission :
262
240
self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSION_ENDPOINT )
263
241
return super ().get_submission (submission , fields = fields )
264
242
265
- def create_submissions (self , submissions : list [Submission ]) -> None :
243
+ def create_submissions (self , submissions : list [Submission ]) -> list [ Submission ] :
266
244
self ._update_endpoint_header (self .DEFAULT_CREATE_SUBMISSIONS_ENDPOINT )
267
245
return super ().create_submissions (submissions )
268
246
@@ -271,7 +249,7 @@ def get_submissions(
271
249
submissions : list [Submission ],
272
250
* ,
273
251
fields : Union [str , Iterable [str ], None ] = None ,
274
- ) -> None :
252
+ ) -> list [ Submission ] :
275
253
self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSIONS_ENDPOINT )
276
254
return super ().get_submissions (submissions , fields = fields )
277
255
@@ -317,7 +295,7 @@ def get_statuses(self) -> list[dict]:
317
295
self ._update_endpoint_header (self .DEFAULT_STATUSES_ENDPOINT )
318
296
return super ().get_statuses ()
319
297
320
- def create_submission (self , submission : Submission ):
298
+ def create_submission (self , submission : Submission ) -> Submission :
321
299
self ._update_endpoint_header (self .DEFAULT_CREATE_SUBMISSION_ENDPOINT )
322
300
return super ().create_submission (submission )
323
301
@@ -326,11 +304,11 @@ def get_submission(
326
304
submission : Submission ,
327
305
* ,
328
306
fields : Union [str , Iterable [str ], None ] = None ,
329
- ):
307
+ ) -> Submission :
330
308
self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSION_ENDPOINT )
331
309
return super ().get_submission (submission , fields = fields )
332
310
333
- def create_submissions (self , submissions : list [Submission ]) -> None :
311
+ def create_submissions (self , submissions : list [Submission ]) -> list [ Submission ] :
334
312
self ._update_endpoint_header (self .DEFAULT_CREATE_SUBMISSIONS_ENDPOINT )
335
313
return super ().create_submissions (submissions )
336
314
@@ -339,7 +317,7 @@ def get_submissions(
339
317
submissions : list [Submission ],
340
318
* ,
341
319
fields : Union [str , Iterable [str ], None ] = None ,
342
- ) -> None :
320
+ ) -> list [ Submission ] :
343
321
self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSIONS_ENDPOINT )
344
322
return super ().get_submissions (submissions , fields = fields )
345
323
@@ -398,3 +376,66 @@ class SuluJudge0ExtraCE(Sulu):
398
376
399
377
def __init__ (self , api_key ):
400
378
super ().__init__ (self .DEFAULT_ENDPOINT , api_key = api_key )
379
+
380
+
381
+ def wait (
382
+ client : Client ,
383
+ submissions : Union [Submission , list [Submission ]],
384
+ * ,
385
+ retry_mechanism : Optional [RetryMechanism ] = None ,
386
+ ) -> Union [Submission , list [Submission ]]:
387
+ if retry_mechanism is None :
388
+ retry_mechanism = RegularPeriodRetry ()
389
+
390
+ if not isinstance (submissions , (list , tuple )):
391
+ submissions_to_check = {
392
+ submission .token : submission for submission in [submissions ]
393
+ }
394
+ else :
395
+ submissions_to_check = {
396
+ submission .token : submission for submission in submissions
397
+ }
398
+
399
+ while len (submissions_to_check ) > 0 and not retry_mechanism .is_done ():
400
+ client .get_submissions (submissions_to_check .values ())
401
+ for token in list (submissions_to_check ):
402
+ submission = submissions_to_check [token ]
403
+ if submission .is_done ():
404
+ submissions_to_check .pop (token )
405
+
406
+ # Don't wait if there is no submissions to check for anymore.
407
+ if len (submissions_to_check ) == 0 :
408
+ break
409
+
410
+ retry_mechanism .wait ()
411
+ retry_mechanism .step ()
412
+
413
+ return submissions
414
+
415
+
416
+ def async_execute (
417
+ * ,
418
+ client : Client ,
419
+ submissions : Union [Submission , list [Submission ]],
420
+ ) -> Union [Submission , list [Submission ]]:
421
+ if isinstance (submissions , (list , tuple )):
422
+ return client .create_submissions (submissions )
423
+ else :
424
+ return client .create_submission (submissions )
425
+
426
+
427
+ def sync_execute (
428
+ * ,
429
+ client : Client ,
430
+ submissions : Union [Submission , list [Submission ]],
431
+ ) -> Union [Submission , list [Submission ]]:
432
+ submissions = async_execute (client = client , submissions = submissions )
433
+ return wait (client , submissions )
434
+
435
+
436
+ def execute (
437
+ * ,
438
+ client : Client ,
439
+ submissions : Union [Submission , list [Submission ]],
440
+ ) -> Union [Submission , list [Submission ]]:
441
+ return sync_execute (client = client , submissions = submissions )
0 commit comments