codeoceansdk.CodeOcean
1import logging 2from dataclasses import dataclass, asdict 3 4import requests 5 6logger = logging.getLogger(__name__) 7 8 9@dataclass(kw_only=True) 10class CodeOcean: 11 """Class to access Code Ocean environment, passing domain and API key""" 12 13 domain: str 14 """Code Ocean domain (for example, acmecorp.codeocean.com)""" 15 api_key: str 16 """API key to use to access capsules.""" 17 18 def __post_init__(self): 19 self.session = requests.Session() 20 self.session.auth = (self.api_key, "") 21 self.api_url = f"https://{self.domain}/api/v1" 22 23 def check_domain(self): 24 """ 25 Check if domain is accessible 26 :return: bool 27 """ 28 try: 29 res = self.session.get(self.api_url) 30 logger.debug(res) 31 return True 32 except requests.ConnectionError as e: 33 logger.error(e) 34 return False 35 36 @staticmethod 37 def _handle_http(res): 38 if 199 < res.status_code < 300: 39 return res 40 elif 399 < res.status_code < 500: 41 logger.error(f"Client error! HTTP response: {res.status_code}") 42 elif 499 < res.status_code < 600: 43 logger.error(f"Server error! HTTP response {res.status_code}") 44 else: 45 logger.error(f"Unexpected server code! HTTP response {res.status_code}") 46 47 if "message" in res.json(): 48 logger.error(f"Unsuccessful request: {res.json()['message']}") 49 raise requests.HTTPError 50 51 def get(self, url, params=None): 52 """ 53 Handle get requests and errors. 54 :param params: Parameters to send in query string. 55 :param url: Input url 56 :return: requests object 57 """ 58 return self._handle_http(self.session.get(url, params=params)) 59 60 def post(self, url, json=None): 61 """ 62 Handle post requests and errors. 63 :param json: Dictionary containing JSON parameters. 64 :param url: Input url 65 :return: requests object 66 """ 67 return self._handle_http(self.session.post(url, json=json)) 68 69 def delete(self, url, params=None): 70 """ 71 Handle delete requests and errors. 72 :param params: Parameters to send in query string. 73 :param url: Input url 74 :return: requests object 75 """ 76 return self._handle_http(self.session.delete(url, params=params)) 77 78 def put(self, url, json=None): 79 """ 80 Handle put requests and errors. 81 :param json: Dictionary containing JSON parameters. 82 :param url: Input url 83 :return: requests object 84 """ 85 return self._handle_http(self.session.put(url, json=json)) 86 87 def patch(self, url, params=None): 88 """ 89 Handle path requests and errors. 90 :param params: Parameters to send in query string. 91 :param url: Input url 92 :return: requests object 93 """ 94 return self._handle_http(self.session.patch(url, params=params))
logger =
<Logger codeoceansdk.CodeOcean (WARNING)>
@dataclass(kw_only=True)
class
CodeOcean:
10@dataclass(kw_only=True) 11class CodeOcean: 12 """Class to access Code Ocean environment, passing domain and API key""" 13 14 domain: str 15 """Code Ocean domain (for example, acmecorp.codeocean.com)""" 16 api_key: str 17 """API key to use to access capsules.""" 18 19 def __post_init__(self): 20 self.session = requests.Session() 21 self.session.auth = (self.api_key, "") 22 self.api_url = f"https://{self.domain}/api/v1" 23 24 def check_domain(self): 25 """ 26 Check if domain is accessible 27 :return: bool 28 """ 29 try: 30 res = self.session.get(self.api_url) 31 logger.debug(res) 32 return True 33 except requests.ConnectionError as e: 34 logger.error(e) 35 return False 36 37 @staticmethod 38 def _handle_http(res): 39 if 199 < res.status_code < 300: 40 return res 41 elif 399 < res.status_code < 500: 42 logger.error(f"Client error! HTTP response: {res.status_code}") 43 elif 499 < res.status_code < 600: 44 logger.error(f"Server error! HTTP response {res.status_code}") 45 else: 46 logger.error(f"Unexpected server code! HTTP response {res.status_code}") 47 48 if "message" in res.json(): 49 logger.error(f"Unsuccessful request: {res.json()['message']}") 50 raise requests.HTTPError 51 52 def get(self, url, params=None): 53 """ 54 Handle get requests and errors. 55 :param params: Parameters to send in query string. 56 :param url: Input url 57 :return: requests object 58 """ 59 return self._handle_http(self.session.get(url, params=params)) 60 61 def post(self, url, json=None): 62 """ 63 Handle post requests and errors. 64 :param json: Dictionary containing JSON parameters. 65 :param url: Input url 66 :return: requests object 67 """ 68 return self._handle_http(self.session.post(url, json=json)) 69 70 def delete(self, url, params=None): 71 """ 72 Handle delete requests and errors. 73 :param params: Parameters to send in query string. 74 :param url: Input url 75 :return: requests object 76 """ 77 return self._handle_http(self.session.delete(url, params=params)) 78 79 def put(self, url, json=None): 80 """ 81 Handle put requests and errors. 82 :param json: Dictionary containing JSON parameters. 83 :param url: Input url 84 :return: requests object 85 """ 86 return self._handle_http(self.session.put(url, json=json)) 87 88 def patch(self, url, params=None): 89 """ 90 Handle path requests and errors. 91 :param params: Parameters to send in query string. 92 :param url: Input url 93 :return: requests object 94 """ 95 return self._handle_http(self.session.patch(url, params=params))
Class to access Code Ocean environment, passing domain and API key
def
check_domain(self):
24 def check_domain(self): 25 """ 26 Check if domain is accessible 27 :return: bool 28 """ 29 try: 30 res = self.session.get(self.api_url) 31 logger.debug(res) 32 return True 33 except requests.ConnectionError as e: 34 logger.error(e) 35 return False
Check if domain is accessible
Returns
bool
def
get(self, url, params=None):
52 def get(self, url, params=None): 53 """ 54 Handle get requests and errors. 55 :param params: Parameters to send in query string. 56 :param url: Input url 57 :return: requests object 58 """ 59 return self._handle_http(self.session.get(url, params=params))
Handle get requests and errors.
Parameters
- params: Parameters to send in query string.
- url: Input url
Returns
requests object
def
post(self, url, json=None):
61 def post(self, url, json=None): 62 """ 63 Handle post requests and errors. 64 :param json: Dictionary containing JSON parameters. 65 :param url: Input url 66 :return: requests object 67 """ 68 return self._handle_http(self.session.post(url, json=json))
Handle post requests and errors.
Parameters
- json: Dictionary containing JSON parameters.
- url: Input url
Returns
requests object
def
delete(self, url, params=None):
70 def delete(self, url, params=None): 71 """ 72 Handle delete requests and errors. 73 :param params: Parameters to send in query string. 74 :param url: Input url 75 :return: requests object 76 """ 77 return self._handle_http(self.session.delete(url, params=params))
Handle delete requests and errors.
Parameters
- params: Parameters to send in query string.
- url: Input url
Returns
requests object
def
put(self, url, json=None):
79 def put(self, url, json=None): 80 """ 81 Handle put requests and errors. 82 :param json: Dictionary containing JSON parameters. 83 :param url: Input url 84 :return: requests object 85 """ 86 return self._handle_http(self.session.put(url, json=json))
Handle put requests and errors.
Parameters
- json: Dictionary containing JSON parameters.
- url: Input url
Returns
requests object
def
patch(self, url, params=None):
88 def patch(self, url, params=None): 89 """ 90 Handle path requests and errors. 91 :param params: Parameters to send in query string. 92 :param url: Input url 93 :return: requests object 94 """ 95 return self._handle_http(self.session.patch(url, params=params))
Handle path requests and errors.
Parameters
- params: Parameters to send in query string.
- url: Input url
Returns
requests object