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

CodeOcean(*, domain: str, api_key: str)
domain: str

Code Ocean domain (for example, acmecorp.codeocean.com)

api_key: str

API key to use to access capsules.

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