1111import xml
1212import xmltodict
1313from urllib3 import ProxyManager
14- from typing import Dict , Optional , Union
14+ from typing import Dict , Optional , Tuple , Union
1515import zipfile
1616
1717import minio
2424 OpenMLHashException ,
2525)
2626
27+ DATA_TYPE = Dict [str , Union [str , int ]]
28+ FILE_ELEMENTS_TYPE = Dict [str , Union [str , Tuple [str , str ]]]
29+
2730
2831def resolve_env_proxies (url : str ) -> Optional [str ]:
2932 """Attempt to find a suitable proxy for this url.
@@ -54,7 +57,12 @@ def _create_url_from_endpoint(endpoint: str) -> str:
5457 return url .replace ("=" , "%3d" )
5558
5659
57- def _perform_api_call (call , request_method , data = None , file_elements = None ):
60+ def _perform_api_call (
61+ call : str ,
62+ request_method : str ,
63+ data : Optional [DATA_TYPE ] = None ,
64+ file_elements : Optional [FILE_ELEMENTS_TYPE ] = None ,
65+ ) -> str :
5866 """
5967 Perform an API call at the OpenML server.
6068
@@ -76,8 +84,6 @@ def _perform_api_call(call, request_method, data=None, file_elements=None):
7684
7785 Returns
7886 -------
79- return_code : int
80- HTTP return code
8187 return_value : str
8288 Return value of the OpenML server
8389 """
@@ -257,7 +263,7 @@ def _download_text_file(
257263 return None
258264
259265
260- def _file_id_to_url (file_id , filename = None ):
266+ def _file_id_to_url (file_id : str , filename : Optional [ str ] = None ) -> str :
261267 """
262268 Presents the URL how to download a given file id
263269 filename is optional
@@ -269,7 +275,9 @@ def _file_id_to_url(file_id, filename=None):
269275 return url
270276
271277
272- def _read_url_files (url , data = None , file_elements = None ):
278+ def _read_url_files (
279+ url : str , data : Optional [DATA_TYPE ] = None , file_elements : Optional [FILE_ELEMENTS_TYPE ] = None
280+ ) -> requests .Response :
273281 """do a post request to url with data
274282 and sending file_elements as files"""
275283
@@ -288,7 +296,12 @@ def _read_url_files(url, data=None, file_elements=None):
288296 return response
289297
290298
291- def __read_url (url , request_method , data = None , md5_checksum = None ):
299+ def __read_url (
300+ url : str ,
301+ request_method : str ,
302+ data : Optional [DATA_TYPE ] = None ,
303+ md5_checksum : Optional [str ] = None ,
304+ ) -> requests .Response :
292305 data = {} if data is None else data
293306 if config .apikey :
294307 data ["api_key" ] = config .apikey
@@ -306,10 +319,16 @@ def __is_checksum_equal(downloaded_file_binary: bytes, md5_checksum: Optional[st
306319 return md5_checksum == md5_checksum_download
307320
308321
309- def _send_request (request_method , url , data , files = None , md5_checksum = None ):
322+ def _send_request (
323+ request_method : str ,
324+ url : str ,
325+ data : DATA_TYPE ,
326+ files : Optional [FILE_ELEMENTS_TYPE ] = None ,
327+ md5_checksum : Optional [str ] = None ,
328+ ) -> requests .Response :
310329 n_retries = max (1 , config .connection_n_retries )
311330
312- response = None
331+ response : requests . Response
313332 with requests .Session () as session :
314333 # Start at one to have a non-zero multiplier for the sleep
315334 for retry_counter in range (1 , n_retries + 1 ):
@@ -380,12 +399,12 @@ def human(n: int) -> float:
380399
381400 delay = {"human" : human , "robot" : robot }[config .retry_policy ](retry_counter )
382401 time .sleep (delay )
383- if response is None :
384- raise ValueError ("This should never happen!" )
385402 return response
386403
387404
388- def __check_response (response , url , file_elements ):
405+ def __check_response (
406+ response : requests .Response , url : str , file_elements : Optional [FILE_ELEMENTS_TYPE ]
407+ ) -> None :
389408 if response .status_code != 200 :
390409 raise __parse_server_exception (response , url , file_elements = file_elements )
391410 elif (
@@ -397,7 +416,7 @@ def __check_response(response, url, file_elements):
397416def __parse_server_exception (
398417 response : requests .Response ,
399418 url : str ,
400- file_elements : Dict ,
419+ file_elements : Optional [ FILE_ELEMENTS_TYPE ] ,
401420) -> OpenMLServerError :
402421 if response .status_code == 414 :
403422 raise OpenMLServerError ("URI too long! ({})" .format (url ))
0 commit comments