1010
1111
1212class 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.
1331 API_KEY_ENV : ClassVar [str ] = None
1432
1533 def __init__ (
@@ -24,7 +42,6 @@ def __init__(
2442 self .retry_strategy = retry_strategy
2543 self .session = requests .Session ()
2644
27- # TODO: Should be handled differently.
2845 try :
2946 self .languages = self .get_languages ()
3047 self .config = self .get_config_info ()
@@ -39,6 +56,13 @@ def __del__(self):
3956
4057 @handle_too_many_requests_error_for_preview_client
4158 def get_about (self ) -> dict :
59+ """Get general information about judge0.
60+
61+ Returns
62+ -------
63+ dict
64+ General information about judge0.
65+ """
4266 response = self .session .get (
4367 f"{ self .endpoint } /about" ,
4468 headers = self .auth_headers ,
@@ -48,6 +72,13 @@ def get_about(self) -> dict:
4872
4973 @handle_too_many_requests_error_for_preview_client
5074 def get_config_info (self ) -> Config :
75+ """Get information about client's configuration.
76+
77+ Returns
78+ -------
79+ Config
80+ Client's configuration.
81+ """
5182 response = self .session .get (
5283 f"{ self .endpoint } /config_info" ,
5384 headers = self .auth_headers ,
@@ -57,20 +88,46 @@ def get_config_info(self) -> Config:
5788
5889 @handle_too_many_requests_error_for_preview_client
5990 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+ """
60103 request_url = f"{ self .endpoint } /languages/{ language_id } "
61104 response = self .session .get (request_url , headers = self .auth_headers )
62105 response .raise_for_status ()
63106 return Language (** response .json ())
64107
65108 @handle_too_many_requests_error_for_preview_client
66109 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+ """
67117 request_url = f"{ self .endpoint } /languages"
68118 response = self .session .get (request_url , headers = self .auth_headers )
69119 response .raise_for_status ()
70120 return [Language (** lang_dict ) for lang_dict in response .json ()]
71121
72122 @handle_too_many_requests_error_for_preview_client
73123 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+ """
74131 response = self .session .get (
75132 f"{ self .endpoint } /statuses" ,
76133 headers = self .auth_headers ,
@@ -80,20 +137,43 @@ def get_statuses(self) -> list[dict]:
80137
81138 @property
82139 def version (self ):
140+ """Property corresponding to the current client's version."""
83141 if not hasattr (self , "_version" ):
84142 _version = self .get_about ()["version" ]
85143 setattr (self , "_version" , _version )
86144 return self ._version
87145
88146 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+ """
90158 if isinstance (language , LanguageAlias ):
91159 supported_language_ids = LANGUAGE_TO_LANGUAGE_ID [self .version ]
92160 language = supported_language_ids .get (language , - 1 )
93161 return language
94162
95163 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+ """
97177 language_id = self .get_language_id (language )
98178 return any (language_id == lang .id for lang in self .languages )
99179
@@ -208,9 +288,6 @@ def create_submissions(self, submissions: Submissions) -> Submissions:
208288 f"{ submission .language } !"
209289 )
210290
211- # TODO: Maybe raise an exception if the number of submissions is bigger
212- # than the batch size a client supports?
213-
214291 submissions_body = [submission .as_body (self ) for submission in submissions ]
215292
216293 response = self .session .post (
@@ -516,7 +593,15 @@ def __init__(self, api_key, **kwargs):
516593
517594
518595class 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+ """
520605
521606 API_KEY_ENV : ClassVar [str ] = "JUDGE0_SULU_API_KEY"
522607
@@ -530,7 +615,13 @@ def __init__(self, endpoint, api_key=None, **kwargs):
530615
531616
532617class 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+ """
534625
535626 DEFAULT_ENDPOINT : ClassVar [str ] = "https://judge0-ce.p.sulu.sh"
536627 HOME_URL : ClassVar [str ] = "https://sparkhub.sulu.sh/apis/judge0/judge0-ce/readme"
@@ -544,7 +635,13 @@ def __init__(self, api_key=None, **kwargs):
544635
545636
546637class 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+ """
548645
549646 DEFAULT_ENDPOINT : ClassVar [str ] = "https://judge0-extra-ce.p.sulu.sh"
550647 HOME_URL : ClassVar [str ] = (
0 commit comments