Skip to content

Commit a63bae6

Browse files
committed
Use Session object for requests in client methods.
1 parent 4d5e24b commit a63bae6

File tree

1 file changed

+37
-27
lines changed

1 file changed

+37
-27
lines changed

src/judge0/clients.py

+37-27
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ def __init__(
2222
self.endpoint = endpoint
2323
self.auth_headers = auth_headers
2424
self.retry_strategy = retry_strategy
25+
self.session = requests.Session()
2526

2627
# TODO: Should be handled differently.
2728
try:
@@ -33,46 +34,49 @@ def __init__(
3334
"review your authentication credentials."
3435
) from e
3536

37+
def __del__(self):
38+
self.session.close()
39+
3640
@handle_too_many_requests_error_for_preview_client
3741
def get_about(self) -> dict:
38-
r = requests.get(
42+
response = self.session.get(
3943
f"{self.endpoint}/about",
4044
headers=self.auth_headers,
4145
)
42-
r.raise_for_status()
43-
return r.json()
46+
response.raise_for_status()
47+
return response.json()
4448

4549
@handle_too_many_requests_error_for_preview_client
4650
def get_config_info(self) -> dict:
47-
r = requests.get(
51+
response = self.session.get(
4852
f"{self.endpoint}/config_info",
4953
headers=self.auth_headers,
5054
)
51-
r.raise_for_status()
52-
return r.json()
55+
response.raise_for_status()
56+
return response.json()
5357

5458
@handle_too_many_requests_error_for_preview_client
5559
def get_language(self, language_id) -> dict:
5660
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()
6064

6165
@handle_too_many_requests_error_for_preview_client
6266
def get_languages(self) -> list[dict]:
6367
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()
6771

6872
@handle_too_many_requests_error_for_preview_client
6973
def get_statuses(self) -> list[dict]:
70-
r = requests.get(
74+
response = self.session.get(
7175
f"{self.endpoint}/statuses",
7276
headers=self.auth_headers,
7377
)
74-
r.raise_for_status()
75-
return r.json()
78+
response.raise_for_status()
79+
return response.json()
7680

7781
@property
7882
def version(self):
@@ -123,15 +127,15 @@ def create_submission(self, submission: Submission) -> Submission:
123127

124128
body = submission.as_body(self)
125129

126-
resp = requests.post(
130+
response = self.session.post(
127131
f"{self.endpoint}/submissions",
128132
json=body,
129133
params=params,
130134
headers=self.auth_headers,
131135
)
132-
resp.raise_for_status()
136+
response.raise_for_status()
133137

134-
submission.set_attributes(resp.json())
138+
submission.set_attributes(response.json())
135139

136140
return submission
137141

@@ -169,14 +173,14 @@ def get_submission(
169173
else:
170174
params["fields"] = "*"
171175

172-
resp = requests.get(
176+
response = self.session.get(
173177
f"{self.endpoint}/submissions/{submission.token}",
174178
params=params,
175179
headers=self.auth_headers,
176180
)
177-
resp.raise_for_status()
181+
response.raise_for_status()
178182

179-
submission.set_attributes(resp.json())
183+
submission.set_attributes(response.json())
180184

181185
return submission
182186

@@ -209,15 +213,15 @@ def create_submissions(self, submissions: Submissions) -> Submissions:
209213

210214
submissions_body = [submission.as_body(self) for submission in submissions]
211215

212-
resp = requests.post(
216+
response = self.session.post(
213217
f"{self.endpoint}/submissions/batch",
214218
headers=self.auth_headers,
215219
params={"base64_encoded": "true"},
216220
json={"submissions": submissions_body},
217221
)
218-
resp.raise_for_status()
222+
response.raise_for_status()
219223

220-
for submission, attrs in zip(submissions, resp.json()):
224+
for submission, attrs in zip(submissions, response.json()):
221225
submission.set_attributes(attrs)
222226

223227
return submissions
@@ -262,20 +266,22 @@ def get_submissions(
262266
tokens = ",".join(submission.token for submission in submissions)
263267
params["tokens"] = tokens
264268

265-
resp = requests.get(
269+
response = self.session.get(
266270
f"{self.endpoint}/submissions/batch",
267271
params=params,
268272
headers=self.auth_headers,
269273
)
270-
resp.raise_for_status()
274+
response.raise_for_status()
271275

272-
for submission, attrs in zip(submissions, resp.json()["submissions"]):
276+
for submission, attrs in zip(submissions, response.json()["submissions"]):
273277
submission.set_attributes(attrs)
274278

275279
return submissions
276280

277281

278282
class ATD(Client):
283+
"""Base class for all AllThingsDev clients."""
284+
279285
API_KEY_ENV = "JUDGE0_ATD_API_KEY"
280286

281287
def __init__(self, endpoint, host_header_value, api_key, **kwargs):
@@ -439,6 +445,8 @@ def get_submissions(
439445

440446

441447
class Rapid(Client):
448+
"""Base class for all RapidAPI clients."""
449+
442450
API_KEY_ENV = "JUDGE0_RAPID_API_KEY"
443451

444452
def __init__(self, endpoint, host_header_value, api_key, **kwargs):
@@ -482,6 +490,8 @@ def __init__(self, api_key, **kwargs):
482490

483491

484492
class Sulu(Client):
493+
"""Base class for all Sulu clients."""
494+
485495
API_KEY_ENV = "JUDGE0_SULU_API_KEY"
486496

487497
def __init__(self, endpoint, api_key=None, **kwargs):

0 commit comments

Comments
 (0)