timeplus.resource
resource
This module defines base class for REST resource class
:copyright: (c) 2022 by Timeplus
:license: Apache2, see LICENSE for more details.
View Source
0""" 1resource 2 3This module defines base class for REST resource class 4:copyright: (c) 2022 by Timeplus 5:license: Apache2, see LICENSE for more details. 6""" 7 8import requests 9 10from timeplus.base import Base 11from timeplus.env import Env 12from timeplus.error import TimeplusAPIError 13 14 15class ResourceBase(Base): 16 """ 17 ResourceBase class defines base class for all REST resoruce objects 18 """ 19 20 _resource_name = "resource" 21 22 def __init__(self, env=None): 23 Base.__init__(self) 24 if env is None: 25 env = Env.current() 26 self._headers = env.headers() 27 self._base_url = env.base_url() 28 self._env = env 29 self._logger = env.logger() 30 31 def create(self): 32 url = f"{self._base_url}/{self._resource_name}/" 33 self._logger.debug("post {}", url) 34 try: 35 r = requests.post( 36 f"{self._base_url}/{self._resource_name}/", 37 json=self.data(), 38 headers=self._headers, 39 timeout=self._env.http_timeout(), 40 ) 41 if r.status_code < 200 or r.status_code > 299: 42 err_msg = f"failed to create {self._resource_name} due to {r.text}" 43 raise TimeplusAPIError("post", r.status_code, err_msg) 44 else: 45 self._logger.debug("source {} has been created", self._resource_name) 46 self._data = r.json() 47 return self 48 except Exception as e: 49 self._logger.error(f"create failed {e}") 50 raise e 51 52 def get(self): 53 url = f"{self._base_url}/{self._resource_name}/{self.id()}" 54 self._logger.debug("get {}", url) 55 try: 56 r = requests.get( 57 url, 58 headers=self._headers, 59 timeout=self._env.http_timeout(), 60 ) 61 if r.status_code < 200 or r.status_code > 299: 62 err_msg = f"failed to get {self._resource_name} due to {r.text}" 63 raise TimeplusAPIError("get", r.status_code, err_msg) 64 else: 65 self._logger.debug("get {} success", self._resource_name) 66 self._data = r.json() 67 return self 68 except Exception as e: 69 self._logger.error(f"get failed {e}") 70 raise e 71 72 def delete(self): 73 url = f"{self._base_url}/{self._resource_name}/{self.id()}" 74 self._logger.debug("delete {}", url) 75 try: 76 r = requests.delete( 77 url, 78 headers=self._headers, 79 timeout=self._env.http_timeout(), 80 ) 81 if r.status_code < 200 or r.status_code > 299: 82 err_msg = f"failed to delete {self._resource_name} due to {r.text}" 83 self._logger.error(err_msg) 84 raise TimeplusAPIError("delete", r.status_code, err_msg) 85 else: 86 self._logger.debug(f"delete {self._resource_name} success") 87 return self 88 except Exception as e: 89 self._logger.error(f"delete failed {e}") 90 raise e 91 92 def action(self, action_name): 93 url = f"{self._base_url}/{self._resource_name}/{self.id()}/{action_name}" 94 self._logger.debug("post {}", url) 95 try: 96 r = requests.post( 97 url, 98 headers=self._headers, 99 timeout=self._env.http_timeout(), 100 ) 101 if r.status_code < 200 or r.status_code > 299: 102 err_msg = ( 103 f"failed to {action_name} {self._resource_name} due to {r.text}" 104 ) 105 self._logger.error(err_msg) 106 raise TimeplusAPIError("post", r.status_code, err_msg) 107 else: 108 self._logger.debug(f"{action_name} {self._resource_name} success") 109 return self 110 except Exception as e: 111 self._logger.error(f"{action_name} failed {e}") 112 raise e 113 114 @classmethod 115 def list(cls, env=None): 116 if env is None: 117 env = Env.current() 118 headers = env.headers() 119 base_url = env.base_url() 120 121 try: 122 url = f"{base_url}/{cls._resource_name}/" 123 env.logger().debug("get {}", url) 124 r = requests.get(url, headers=headers, timeout=env.http_timeout()) 125 if r.status_code < 200 or r.status_code > 299: 126 err_msg = f"failed to list {cls._resource_name} due to {r.text}" 127 raise TimeplusAPIError("get", r.status_code, err_msg) 128 else: 129 env.logger().debug(f"list {cls._resource_name} success") 130 result = [cls.build(val, env=env) for val in r.json()] 131 return result 132 except Exception as e: 133 env.logger().error(f"list failed {e}") 134 raise e
View Source
16class ResourceBase(Base): 17 """ 18 ResourceBase class defines base class for all REST resoruce objects 19 """ 20 21 _resource_name = "resource" 22 23 def __init__(self, env=None): 24 Base.__init__(self) 25 if env is None: 26 env = Env.current() 27 self._headers = env.headers() 28 self._base_url = env.base_url() 29 self._env = env 30 self._logger = env.logger() 31 32 def create(self): 33 url = f"{self._base_url}/{self._resource_name}/" 34 self._logger.debug("post {}", url) 35 try: 36 r = requests.post( 37 f"{self._base_url}/{self._resource_name}/", 38 json=self.data(), 39 headers=self._headers, 40 timeout=self._env.http_timeout(), 41 ) 42 if r.status_code < 200 or r.status_code > 299: 43 err_msg = f"failed to create {self._resource_name} due to {r.text}" 44 raise TimeplusAPIError("post", r.status_code, err_msg) 45 else: 46 self._logger.debug("source {} has been created", self._resource_name) 47 self._data = r.json() 48 return self 49 except Exception as e: 50 self._logger.error(f"create failed {e}") 51 raise e 52 53 def get(self): 54 url = f"{self._base_url}/{self._resource_name}/{self.id()}" 55 self._logger.debug("get {}", url) 56 try: 57 r = requests.get( 58 url, 59 headers=self._headers, 60 timeout=self._env.http_timeout(), 61 ) 62 if r.status_code < 200 or r.status_code > 299: 63 err_msg = f"failed to get {self._resource_name} due to {r.text}" 64 raise TimeplusAPIError("get", r.status_code, err_msg) 65 else: 66 self._logger.debug("get {} success", self._resource_name) 67 self._data = r.json() 68 return self 69 except Exception as e: 70 self._logger.error(f"get failed {e}") 71 raise e 72 73 def delete(self): 74 url = f"{self._base_url}/{self._resource_name}/{self.id()}" 75 self._logger.debug("delete {}", url) 76 try: 77 r = requests.delete( 78 url, 79 headers=self._headers, 80 timeout=self._env.http_timeout(), 81 ) 82 if r.status_code < 200 or r.status_code > 299: 83 err_msg = f"failed to delete {self._resource_name} due to {r.text}" 84 self._logger.error(err_msg) 85 raise TimeplusAPIError("delete", r.status_code, err_msg) 86 else: 87 self._logger.debug(f"delete {self._resource_name} success") 88 return self 89 except Exception as e: 90 self._logger.error(f"delete failed {e}") 91 raise e 92 93 def action(self, action_name): 94 url = f"{self._base_url}/{self._resource_name}/{self.id()}/{action_name}" 95 self._logger.debug("post {}", url) 96 try: 97 r = requests.post( 98 url, 99 headers=self._headers, 100 timeout=self._env.http_timeout(), 101 ) 102 if r.status_code < 200 or r.status_code > 299: 103 err_msg = ( 104 f"failed to {action_name} {self._resource_name} due to {r.text}" 105 ) 106 self._logger.error(err_msg) 107 raise TimeplusAPIError("post", r.status_code, err_msg) 108 else: 109 self._logger.debug(f"{action_name} {self._resource_name} success") 110 return self 111 except Exception as e: 112 self._logger.error(f"{action_name} failed {e}") 113 raise e 114 115 @classmethod 116 def list(cls, env=None): 117 if env is None: 118 env = Env.current() 119 headers = env.headers() 120 base_url = env.base_url() 121 122 try: 123 url = f"{base_url}/{cls._resource_name}/" 124 env.logger().debug("get {}", url) 125 r = requests.get(url, headers=headers, timeout=env.http_timeout()) 126 if r.status_code < 200 or r.status_code > 299: 127 err_msg = f"failed to list {cls._resource_name} due to {r.text}" 128 raise TimeplusAPIError("get", r.status_code, err_msg) 129 else: 130 env.logger().debug(f"list {cls._resource_name} success") 131 result = [cls.build(val, env=env) for val in r.json()] 132 return result 133 except Exception as e: 134 env.logger().error(f"list failed {e}") 135 raise e
ResourceBase class defines base class for all REST resoruce objects
View Source
32 def create(self): 33 url = f"{self._base_url}/{self._resource_name}/" 34 self._logger.debug("post {}", url) 35 try: 36 r = requests.post( 37 f"{self._base_url}/{self._resource_name}/", 38 json=self.data(), 39 headers=self._headers, 40 timeout=self._env.http_timeout(), 41 ) 42 if r.status_code < 200 or r.status_code > 299: 43 err_msg = f"failed to create {self._resource_name} due to {r.text}" 44 raise TimeplusAPIError("post", r.status_code, err_msg) 45 else: 46 self._logger.debug("source {} has been created", self._resource_name) 47 self._data = r.json() 48 return self 49 except Exception as e: 50 self._logger.error(f"create failed {e}") 51 raise e
View Source
53 def get(self): 54 url = f"{self._base_url}/{self._resource_name}/{self.id()}" 55 self._logger.debug("get {}", url) 56 try: 57 r = requests.get( 58 url, 59 headers=self._headers, 60 timeout=self._env.http_timeout(), 61 ) 62 if r.status_code < 200 or r.status_code > 299: 63 err_msg = f"failed to get {self._resource_name} due to {r.text}" 64 raise TimeplusAPIError("get", r.status_code, err_msg) 65 else: 66 self._logger.debug("get {} success", self._resource_name) 67 self._data = r.json() 68 return self 69 except Exception as e: 70 self._logger.error(f"get failed {e}") 71 raise e
View Source
73 def delete(self): 74 url = f"{self._base_url}/{self._resource_name}/{self.id()}" 75 self._logger.debug("delete {}", url) 76 try: 77 r = requests.delete( 78 url, 79 headers=self._headers, 80 timeout=self._env.http_timeout(), 81 ) 82 if r.status_code < 200 or r.status_code > 299: 83 err_msg = f"failed to delete {self._resource_name} due to {r.text}" 84 self._logger.error(err_msg) 85 raise TimeplusAPIError("delete", r.status_code, err_msg) 86 else: 87 self._logger.debug(f"delete {self._resource_name} success") 88 return self 89 except Exception as e: 90 self._logger.error(f"delete failed {e}") 91 raise e
View Source
93 def action(self, action_name): 94 url = f"{self._base_url}/{self._resource_name}/{self.id()}/{action_name}" 95 self._logger.debug("post {}", url) 96 try: 97 r = requests.post( 98 url, 99 headers=self._headers, 100 timeout=self._env.http_timeout(), 101 ) 102 if r.status_code < 200 or r.status_code > 299: 103 err_msg = ( 104 f"failed to {action_name} {self._resource_name} due to {r.text}" 105 ) 106 self._logger.error(err_msg) 107 raise TimeplusAPIError("post", r.status_code, err_msg) 108 else: 109 self._logger.debug(f"{action_name} {self._resource_name} success") 110 return self 111 except Exception as e: 112 self._logger.error(f"{action_name} failed {e}") 113 raise e
View Source
115 @classmethod 116 def list(cls, env=None): 117 if env is None: 118 env = Env.current() 119 headers = env.headers() 120 base_url = env.base_url() 121 122 try: 123 url = f"{base_url}/{cls._resource_name}/" 124 env.logger().debug("get {}", url) 125 r = requests.get(url, headers=headers, timeout=env.http_timeout()) 126 if r.status_code < 200 or r.status_code > 299: 127 err_msg = f"failed to list {cls._resource_name} due to {r.text}" 128 raise TimeplusAPIError("get", r.status_code, err_msg) 129 else: 130 env.logger().debug(f"list {cls._resource_name} success") 131 result = [cls.build(val, env=env) for val in r.json()] 132 return result 133 except Exception as e: 134 env.logger().error(f"list failed {e}") 135 raise e