@@ -22,6 +22,7 @@ def __init__(
22
22
self .endpoint = endpoint
23
23
self .auth_headers = auth_headers
24
24
self .retry_strategy = retry_strategy
25
+ self .session = requests .Session ()
25
26
26
27
# TODO: Should be handled differently.
27
28
try :
@@ -33,46 +34,49 @@ def __init__(
33
34
"review your authentication credentials."
34
35
) from e
35
36
37
+ def __del__ (self ):
38
+ self .session .close ()
39
+
36
40
@handle_too_many_requests_error_for_preview_client
37
41
def get_about (self ) -> dict :
38
- r = requests .get (
42
+ response = self . session .get (
39
43
f"{ self .endpoint } /about" ,
40
44
headers = self .auth_headers ,
41
45
)
42
- r .raise_for_status ()
43
- return r .json ()
46
+ response .raise_for_status ()
47
+ return response .json ()
44
48
45
49
@handle_too_many_requests_error_for_preview_client
46
50
def get_config_info (self ) -> dict :
47
- r = requests .get (
51
+ response = self . session .get (
48
52
f"{ self .endpoint } /config_info" ,
49
53
headers = self .auth_headers ,
50
54
)
51
- r .raise_for_status ()
52
- return r .json ()
55
+ response .raise_for_status ()
56
+ return response .json ()
53
57
54
58
@handle_too_many_requests_error_for_preview_client
55
59
def get_language (self , language_id ) -> dict :
56
60
request_url = f"{ self .endpoint } /languages/{ language_id } "
57
- r = requests .get (request_url , headers = self .auth_headers )
58
- r .raise_for_status ()
59
- return r .json ()
61
+ response = self . session .get (request_url , headers = self .auth_headers )
62
+ response .raise_for_status ()
63
+ return response .json ()
60
64
61
65
@handle_too_many_requests_error_for_preview_client
62
66
def get_languages (self ) -> list [dict ]:
63
67
request_url = f"{ self .endpoint } /languages"
64
- r = requests .get (request_url , headers = self .auth_headers )
65
- r .raise_for_status ()
66
- return r .json ()
68
+ response = self . session .get (request_url , headers = self .auth_headers )
69
+ response .raise_for_status ()
70
+ return response .json ()
67
71
68
72
@handle_too_many_requests_error_for_preview_client
69
73
def get_statuses (self ) -> list [dict ]:
70
- r = requests .get (
74
+ response = self . session .get (
71
75
f"{ self .endpoint } /statuses" ,
72
76
headers = self .auth_headers ,
73
77
)
74
- r .raise_for_status ()
75
- return r .json ()
78
+ response .raise_for_status ()
79
+ return response .json ()
76
80
77
81
@property
78
82
def version (self ):
@@ -123,15 +127,15 @@ def create_submission(self, submission: Submission) -> Submission:
123
127
124
128
body = submission .as_body (self )
125
129
126
- resp = requests .post (
130
+ response = self . session .post (
127
131
f"{ self .endpoint } /submissions" ,
128
132
json = body ,
129
133
params = params ,
130
134
headers = self .auth_headers ,
131
135
)
132
- resp .raise_for_status ()
136
+ response .raise_for_status ()
133
137
134
- submission .set_attributes (resp .json ())
138
+ submission .set_attributes (response .json ())
135
139
136
140
return submission
137
141
@@ -169,14 +173,14 @@ def get_submission(
169
173
else :
170
174
params ["fields" ] = "*"
171
175
172
- resp = requests .get (
176
+ response = self . session .get (
173
177
f"{ self .endpoint } /submissions/{ submission .token } " ,
174
178
params = params ,
175
179
headers = self .auth_headers ,
176
180
)
177
- resp .raise_for_status ()
181
+ response .raise_for_status ()
178
182
179
- submission .set_attributes (resp .json ())
183
+ submission .set_attributes (response .json ())
180
184
181
185
return submission
182
186
@@ -209,15 +213,15 @@ def create_submissions(self, submissions: Submissions) -> Submissions:
209
213
210
214
submissions_body = [submission .as_body (self ) for submission in submissions ]
211
215
212
- resp = requests .post (
216
+ response = self . session .post (
213
217
f"{ self .endpoint } /submissions/batch" ,
214
218
headers = self .auth_headers ,
215
219
params = {"base64_encoded" : "true" },
216
220
json = {"submissions" : submissions_body },
217
221
)
218
- resp .raise_for_status ()
222
+ response .raise_for_status ()
219
223
220
- for submission , attrs in zip (submissions , resp .json ()):
224
+ for submission , attrs in zip (submissions , response .json ()):
221
225
submission .set_attributes (attrs )
222
226
223
227
return submissions
@@ -262,20 +266,22 @@ def get_submissions(
262
266
tokens = "," .join (submission .token for submission in submissions )
263
267
params ["tokens" ] = tokens
264
268
265
- resp = requests .get (
269
+ response = self . session .get (
266
270
f"{ self .endpoint } /submissions/batch" ,
267
271
params = params ,
268
272
headers = self .auth_headers ,
269
273
)
270
- resp .raise_for_status ()
274
+ response .raise_for_status ()
271
275
272
- for submission , attrs in zip (submissions , resp .json ()["submissions" ]):
276
+ for submission , attrs in zip (submissions , response .json ()["submissions" ]):
273
277
submission .set_attributes (attrs )
274
278
275
279
return submissions
276
280
277
281
278
282
class ATD (Client ):
283
+ """Base class for all AllThingsDev clients."""
284
+
279
285
API_KEY_ENV = "JUDGE0_ATD_API_KEY"
280
286
281
287
def __init__ (self , endpoint , host_header_value , api_key , ** kwargs ):
@@ -439,6 +445,8 @@ def get_submissions(
439
445
440
446
441
447
class Rapid (Client ):
448
+ """Base class for all RapidAPI clients."""
449
+
442
450
API_KEY_ENV = "JUDGE0_RAPID_API_KEY"
443
451
444
452
def __init__ (self , endpoint , host_header_value , api_key , ** kwargs ):
@@ -482,6 +490,8 @@ def __init__(self, api_key, **kwargs):
482
490
483
491
484
492
class Sulu (Client ):
493
+ """Base class for all Sulu clients."""
494
+
485
495
API_KEY_ENV = "JUDGE0_SULU_API_KEY"
486
496
487
497
def __init__ (self , endpoint , api_key = None , ** kwargs ):
0 commit comments