10
10
11
11
12
12
class Client :
13
+ """Base class for all clients.
14
+
15
+ Parameters
16
+ ----------
17
+ endpoint : str
18
+ Client's default endpoint.
19
+ auth_headers : dict
20
+ Request authentication headers.
21
+
22
+ Attributes
23
+ ----------
24
+ API_KEY_ENV : str
25
+ Environment variable where judge0-python should look for API key for
26
+ the client. Set to default values for ATD, RapidAPI, and Sulu clients.
27
+ """
28
+
29
+ # Environment variable where judge0-python should look for API key for
30
+ # the client. Set to default values for ATD, RapidAPI, and Sulu clients.
13
31
API_KEY_ENV : ClassVar [str ] = None
14
32
15
33
def __init__ (
@@ -24,7 +42,6 @@ def __init__(
24
42
self .retry_strategy = retry_strategy
25
43
self .session = requests .Session ()
26
44
27
- # TODO: Should be handled differently.
28
45
try :
29
46
self .languages = self .get_languages ()
30
47
self .config = self .get_config_info ()
@@ -39,6 +56,13 @@ def __del__(self):
39
56
40
57
@handle_too_many_requests_error_for_preview_client
41
58
def get_about (self ) -> dict :
59
+ """Get general information about judge0.
60
+
61
+ Returns
62
+ -------
63
+ dict
64
+ General information about judge0.
65
+ """
42
66
response = self .session .get (
43
67
f"{ self .endpoint } /about" ,
44
68
headers = self .auth_headers ,
@@ -48,6 +72,13 @@ def get_about(self) -> dict:
48
72
49
73
@handle_too_many_requests_error_for_preview_client
50
74
def get_config_info (self ) -> Config :
75
+ """Get information about client's configuration.
76
+
77
+ Returns
78
+ -------
79
+ Config
80
+ Client's configuration.
81
+ """
51
82
response = self .session .get (
52
83
f"{ self .endpoint } /config_info" ,
53
84
headers = self .auth_headers ,
@@ -57,20 +88,46 @@ def get_config_info(self) -> Config:
57
88
58
89
@handle_too_many_requests_error_for_preview_client
59
90
def get_language (self , language_id : int ) -> Language :
91
+ """Get language corresponding to the id.
92
+
93
+ Parameters
94
+ ----------
95
+ language_id : int
96
+ Language id.
97
+
98
+ Returns
99
+ -------
100
+ Language
101
+ Language corresponding to the passed id.
102
+ """
60
103
request_url = f"{ self .endpoint } /languages/{ language_id } "
61
104
response = self .session .get (request_url , headers = self .auth_headers )
62
105
response .raise_for_status ()
63
106
return Language (** response .json ())
64
107
65
108
@handle_too_many_requests_error_for_preview_client
66
109
def get_languages (self ) -> list [Language ]:
110
+ """Get a list of supported languages.
111
+
112
+ Returns
113
+ -------
114
+ list of language
115
+ A list of supported languages.
116
+ """
67
117
request_url = f"{ self .endpoint } /languages"
68
118
response = self .session .get (request_url , headers = self .auth_headers )
69
119
response .raise_for_status ()
70
120
return [Language (** lang_dict ) for lang_dict in response .json ()]
71
121
72
122
@handle_too_many_requests_error_for_preview_client
73
123
def get_statuses (self ) -> list [dict ]:
124
+ """Get a list of possible submission statuses.
125
+
126
+ Returns
127
+ -------
128
+ list of dict
129
+ A list of possible submission statues.
130
+ """
74
131
response = self .session .get (
75
132
f"{ self .endpoint } /statuses" ,
76
133
headers = self .auth_headers ,
@@ -80,20 +137,43 @@ def get_statuses(self) -> list[dict]:
80
137
81
138
@property
82
139
def version (self ):
140
+ """Property corresponding to the current client's version."""
83
141
if not hasattr (self , "_version" ):
84
142
_version = self .get_about ()["version" ]
85
143
setattr (self , "_version" , _version )
86
144
return self ._version
87
145
88
146
def get_language_id (self , language : Union [LanguageAlias , int ]) -> int :
89
- """Get language id corresponding to the language alias for the client."""
147
+ """Get language id corresponding to the language alias for the client.
148
+
149
+ Parameters
150
+ ----------
151
+ language : LanguageAlias or int
152
+ Language alias or language id.
153
+
154
+ Returns
155
+ -------
156
+ Language id corresponding to the language alias.
157
+ """
90
158
if isinstance (language , LanguageAlias ):
91
159
supported_language_ids = LANGUAGE_TO_LANGUAGE_ID [self .version ]
92
160
language = supported_language_ids .get (language , - 1 )
93
161
return language
94
162
95
163
def is_language_supported (self , language : Union [LanguageAlias , int ]) -> bool :
96
- """Check if language is supported by the client."""
164
+ """Check if language is supported by the client.
165
+
166
+ Parameters
167
+ ----------
168
+ language : LanguageAlias or int
169
+ Language alias or language id.
170
+
171
+ Returns
172
+ -------
173
+ bool
174
+ Return True if language is supported by the client, otherwise returns
175
+ False.
176
+ """
97
177
language_id = self .get_language_id (language )
98
178
return any (language_id == lang .id for lang in self .languages )
99
179
@@ -208,9 +288,6 @@ def create_submissions(self, submissions: Submissions) -> Submissions:
208
288
f"{ submission .language } !"
209
289
)
210
290
211
- # TODO: Maybe raise an exception if the number of submissions is bigger
212
- # than the batch size a client supports?
213
-
214
291
submissions_body = [submission .as_body (self ) for submission in submissions ]
215
292
216
293
response = self .session .post (
@@ -516,7 +593,15 @@ def __init__(self, api_key, **kwargs):
516
593
517
594
518
595
class Sulu (Client ):
519
- """Base class for all Sulu clients."""
596
+ """Base class for all Sulu clients.
597
+
598
+ Parameters
599
+ ----------
600
+ endpoint : str
601
+ Default request endpoint.
602
+ api_key : str, optional
603
+ Sulu API key.
604
+ """
520
605
521
606
API_KEY_ENV : ClassVar [str ] = "JUDGE0_SULU_API_KEY"
522
607
@@ -530,7 +615,13 @@ def __init__(self, endpoint, api_key=None, **kwargs):
530
615
531
616
532
617
class SuluJudge0CE (Sulu ):
533
- """Sulu client for CE flavor."""
618
+ """Sulu client for CE flavor.
619
+
620
+ Parameters
621
+ ----------
622
+ api_key : str, optional
623
+ Sulu API key.
624
+ """
534
625
535
626
DEFAULT_ENDPOINT : ClassVar [str ] = "https://judge0-ce.p.sulu.sh"
536
627
HOME_URL : ClassVar [str ] = "https://sparkhub.sulu.sh/apis/judge0/judge0-ce/readme"
@@ -544,7 +635,13 @@ def __init__(self, api_key=None, **kwargs):
544
635
545
636
546
637
class SuluJudge0ExtraCE (Sulu ):
547
- """Sulu client for Extra CE flavor."""
638
+ """Sulu client for Extra CE flavor.
639
+
640
+ Parameters
641
+ ----------
642
+ api_key : str
643
+ Sulu API key.
644
+ """
548
645
549
646
DEFAULT_ENDPOINT : ClassVar [str ] = "https://judge0-extra-ce.p.sulu.sh"
550
647
HOME_URL : ClassVar [str ] = (
0 commit comments