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
#   class ResourceBase(timeplus.base.Base):
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

#   ResourceBase(env=None)
View Source
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()
#   def create(self):
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
#   def get(self):
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
#   def delete(self):
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
#   def action(self, action_name):
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
#  
@classmethod
def list(cls, env=None):
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
Inherited Members
timeplus.base.Base
prop
data
id