@@ -15,11 +15,6 @@ def __init__(self, endpoint, auth_headers, *, wait=False) -> None:
15
15
except Exception :
16
16
raise RuntimeError ("Client authentication failed." )
17
17
18
- # .....
19
- # judge0.BASH = language_id
20
- # for lang in BaseLanguage.values:
21
- # setattr(self.Language, lang, self.resolve_language(self.languages, lang))
22
-
23
18
def get_about (self ) -> dict :
24
19
r = requests .get (
25
20
f"{ self .endpoint } /about" ,
@@ -56,7 +51,7 @@ def get_statuses(self) -> list[dict]:
56
51
r .raise_for_status ()
57
52
return r .json ()
58
53
59
- def create_submission (self , submission : Submission ):
54
+ def create_submission (self , submission : Submission ) -> None :
60
55
# TODO: check if client supports specified language_id
61
56
params = {
62
57
"base64_encoded" : "true" ,
@@ -67,15 +62,15 @@ def create_submission(self, submission: Submission):
67
62
68
63
resp = requests .post (
69
64
f"{ self .endpoint } /submissions" ,
70
- headers = self .auth_headers ,
71
- params = params ,
72
65
json = body ,
66
+ params = params ,
67
+ headers = self .auth_headers ,
73
68
)
74
69
resp .raise_for_status ()
75
70
76
71
submission .set_attributes (resp .json ())
77
72
78
- def get_submission (self , submission : Submission , * , fields = None ):
73
+ def get_submission (self , submission : Submission , * , fields = None ) -> None :
79
74
"""Check the submission status."""
80
75
81
76
params = {
@@ -87,13 +82,53 @@ def get_submission(self, submission: Submission, *, fields=None):
87
82
88
83
resp = requests .get (
89
84
f"{ self .endpoint } /submissions/{ submission .token } " ,
90
- headers = self .auth_headers ,
91
85
params = params ,
86
+ headers = self .auth_headers ,
92
87
)
93
88
resp .raise_for_status ()
94
89
95
90
submission .set_attributes (resp .json ())
96
91
92
+ def create_submissions (self , submissions : list [Submission ]) -> None :
93
+ params = {
94
+ "base64_encoded" : "true" ,
95
+ "wait" : str (self .wait ).lower (),
96
+ }
97
+
98
+ submissions_body = [submission .to_dict () for submission in submissions ]
99
+
100
+ resp = requests .post (
101
+ f"{ self .endpoint } /submissions/batch" ,
102
+ headers = self .auth_headers ,
103
+ params = params ,
104
+ json = {"submissions" : submissions_body },
105
+ )
106
+ resp .raise_for_status ()
107
+
108
+ for submission , attrs in zip (submissions , resp .json ()):
109
+ submission .set_attributes (attrs )
110
+
111
+ def get_submissions (self , submissions : list [Submission ], * , fields = None ) -> None :
112
+ params = {
113
+ "base64_encoded" : "true" ,
114
+ }
115
+
116
+ if fields is not None :
117
+ params ["fields" ] = "," .join (fields )
118
+
119
+ tokens = "," .join (submission .token for submission in submissions )
120
+ params ["tokens" ] = tokens
121
+
122
+ resp = requests .get (
123
+ f"{ self .endpoint } /submissions/batch" ,
124
+ params = params ,
125
+ headers = self .auth_headers ,
126
+ )
127
+ resp .raise_for_status ()
128
+
129
+ for submission , attrs in zip (submissions , resp .json ()["submissions" ]):
130
+ submission .set_attributes (attrs )
131
+
97
132
98
133
class ATD (Client ):
99
134
@@ -122,6 +157,8 @@ class ATDJudge0CE(ATD):
122
157
DEFAULT_STATUSES_ENDPOINT : str = "c37b603f-6f99-4e31-a361-7154c734f19b"
123
158
DEFAULT_CREATE_SUBMISSION_ENDPOINT : str = "6e65686d-40b0-4bf7-a12f-1f6d033c4473"
124
159
DEFAULT_GET_SUBMISSION_ENDPOINT : str = "b7032b8b-86da-40b4-b9d3-b1f5e2b4ee1e"
160
+ DEFAULT_CREATE_SUBMISSIONS_ENDPOINT : str = "402b857c-1126-4450-bfd8-22e1f2cbff2f"
161
+ DEFAULT_GET_SUBMISSIONS_ENDPOINT : str = "e42f2a26-5b02-472a-80c9-61c4bdae32ec"
125
162
126
163
def __init__ (self , api_key ):
127
164
super ().__init__ (
@@ -150,14 +187,22 @@ def get_statuses(self) -> list[dict]:
150
187
self ._update_endpoint_header (self .DEFAULT_STATUSES_ENDPOINT )
151
188
return super ().get_statuses ()
152
189
153
- def create_submission (self , submission : Submission ):
190
+ def create_submission (self , submission : Submission ) -> None :
154
191
self ._update_endpoint_header (self .DEFAULT_CREATE_SUBMISSION_ENDPOINT )
155
192
return super ().create_submission (submission )
156
193
157
- def get_submission (self , submission : Submission , * , fields = None ):
194
+ def get_submission (self , submission : Submission , * , fields = None ) -> None :
158
195
self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSION_ENDPOINT )
159
196
return super ().get_submission (submission , fields = fields )
160
197
198
+ def create_submissions (self , submissions : Submission ) -> None :
199
+ self ._update_endpoint_header (self .DEFAULT_CREATE_SUBMISSIONS_ENDPOINT )
200
+ return super ().create_submissions (submissions )
201
+
202
+ def get_submissions (self , submissions : Submission , * , fields = None ) -> None :
203
+ self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSIONS_ENDPOINT )
204
+ return super ().get_submissions (submissions , fields = fields )
205
+
161
206
162
207
class ATDJudge0ExtraCE (ATD ):
163
208
DEFAULT_ENDPOINT : str = "https://judge0-extra-ce.proxy-production.allthingsdev.co"
@@ -170,6 +215,8 @@ class ATDJudge0ExtraCE(ATD):
170
215
DEFAULT_STATUSES_ENDPOINT : str = "a2843b3c-673d-4966-9a14-2e7d76dcd0cb"
171
216
DEFAULT_CREATE_SUBMISSION_ENDPOINT : str = "be2d195e-dd58-4770-9f3c-d6c0fbc2b6e5"
172
217
DEFAULT_GET_SUBMISSION_ENDPOINT : str = "c3a457cd-37a6-4106-97a8-9e60a223abbc"
218
+ DEFAULT_CREATE_SUBMISSIONS_ENDPOINT : str = "c64df5d3-edfd-4b08-8687-561af2f80d2f"
219
+ DEFAULT_GET_SUBMISSIONS_ENDPOINT : str = "5d173718-8e6a-4cf5-9d8c-db5e6386d037"
173
220
174
221
def __init__ (self , api_key ):
175
222
super ().__init__ (
@@ -206,6 +253,14 @@ def get_submission(self, submission: Submission, *, fields=None):
206
253
self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSION_ENDPOINT )
207
254
return super ().get_submission (submission , fields = fields )
208
255
256
+ def create_submissions (self , submission : Submission ) -> None :
257
+ self ._update_endpoint_header (self .DEFAULT_CREATE_SUBMISSIONS_ENDPOINT )
258
+ return super ().create_submissions (submission )
259
+
260
+ def get_submissions (self , submission : Submission , * , fields = None ) -> None :
261
+ self ._update_endpoint_header (self .DEFAULT_GET_SUBMISSIONS_ENDPOINT )
262
+ return super ().get_submissions (submission , fields = fields )
263
+
209
264
210
265
class Rapid (Client ):
211
266
0 commit comments