timeplus.env

env

This module defines environment class
:copyright: (c) 2022 by Timeplus
:license: Apache2, see LICENSE for more details.

View Source
  0"""
  1env
  2
  3This module defines environment class  
  4:copyright: (c) 2022 by Timeplus  
  5:license: Apache2, see LICENSE for more details.  
  6"""
  7
  8import sys
  9import os
 10import requests
 11from requests.structures import CaseInsensitiveDict
 12
 13from timeplus.base import Base
 14from timeplus.error import TimeplusAPIError
 15from loguru import logger
 16
 17log_level = os.environ.get("GLUON_LOG_LEVEL", "INFO")
 18
 19logger.remove()
 20
 21logger.add(
 22    sys.stdout,
 23    colorize=True,
 24    format="{time} - {level} - {message}",
 25    level=log_level,
 26)
 27logger.add("gluon.log", rotation="500 MB", level=log_level)
 28
 29
 30class Env(Base):
 31    """
 32    Env class defines running environment of Timeplus.
 33    """
 34
 35    _envs = None
 36    _current_env = None
 37
 38    def __init__(self):
 39        Base.__init__(self)
 40        self.host("localhost")
 41        self.port("8000")
 42        self.schema("http")
 43        self.prop("token", "")
 44
 45        self._headers = CaseInsensitiveDict()
 46        self._headers["Accept"] = "application/json"
 47        self._headers["Content-Type"] = "application/json"
 48        self._headers["Timeplus-Request-From"] = "gluon"
 49        self._http_timeout = 10
 50
 51        Env.add(self)
 52        self._logger = logger
 53
 54    @classmethod
 55    def add(cls, env):
 56        if cls._envs is None:
 57            cls._envs = []
 58
 59        cls._envs.append(env)
 60
 61        if len(cls._envs) == 1:
 62            cls._current_env = env
 63
 64    @classmethod
 65    def current(cls):
 66        return cls._current_env
 67
 68    @classmethod
 69    def setCurrent(cls, env):
 70        cls._current_env = env
 71
 72    @classmethod
 73    def envs(cls):
 74        return cls._envs
 75
 76    def host(self, *args):
 77        return self.prop("host", *args)
 78
 79    def port(self, *args):
 80        return self.prop("port", *args)
 81
 82    def schema(self, *args):
 83        return self.prop("schema", *args)
 84
 85    def base_url(self):
 86        return f"{self.schema()}://{self.host()}:{self.port()}/api/v1beta1"
 87
 88    def headers(self):
 89        self._headers["Authorization"] = f"Bearer {self.token()}"
 90        return self._headers
 91
 92    def token(self, *args):
 93        return self.prop("token", *args)
 94
 95    def info(self):
 96        url = f"{self.schema()}://{self.host()}:{self.port()}/info"
 97        try:
 98            r = requests.get(url, timeout=self.http_timeout())
 99            if r.status_code < 200 or r.status_code > 299:
100                err_msg = f"failed to show info due to {r.text}"
101                self._logger.error(err_msg)
102                raise TimeplusAPIError("get", r.status_code, err_msg)
103            else:
104                return r.json()
105        except Exception as e:
106            raise e
107
108    def ping(self):
109        url = f"{self.schema()}://{self.host()}:{self.port()}/health"
110        try:
111            r = requests.get(url, timeout=self.http_timeout())
112            if r.status_code < 200 or r.status_code > 299:
113                err_msg = f"failed to ping due to {r.text}"
114                self._logger.error(err_msg)
115                raise TimeplusAPIError("get", r.status_code, err_msg)
116            else:
117                return r.json()
118        except Exception as e:
119            raise e
120
121    def logger(self):
122        return self._logger
123
124    def http_timeout(self):
125        return self._http_timeout
View Source
 31class Env(Base):
 32    """
 33    Env class defines running environment of Timeplus.
 34    """
 35
 36    _envs = None
 37    _current_env = None
 38
 39    def __init__(self):
 40        Base.__init__(self)
 41        self.host("localhost")
 42        self.port("8000")
 43        self.schema("http")
 44        self.prop("token", "")
 45
 46        self._headers = CaseInsensitiveDict()
 47        self._headers["Accept"] = "application/json"
 48        self._headers["Content-Type"] = "application/json"
 49        self._headers["Timeplus-Request-From"] = "gluon"
 50        self._http_timeout = 10
 51
 52        Env.add(self)
 53        self._logger = logger
 54
 55    @classmethod
 56    def add(cls, env):
 57        if cls._envs is None:
 58            cls._envs = []
 59
 60        cls._envs.append(env)
 61
 62        if len(cls._envs) == 1:
 63            cls._current_env = env
 64
 65    @classmethod
 66    def current(cls):
 67        return cls._current_env
 68
 69    @classmethod
 70    def setCurrent(cls, env):
 71        cls._current_env = env
 72
 73    @classmethod
 74    def envs(cls):
 75        return cls._envs
 76
 77    def host(self, *args):
 78        return self.prop("host", *args)
 79
 80    def port(self, *args):
 81        return self.prop("port", *args)
 82
 83    def schema(self, *args):
 84        return self.prop("schema", *args)
 85
 86    def base_url(self):
 87        return f"{self.schema()}://{self.host()}:{self.port()}/api/v1beta1"
 88
 89    def headers(self):
 90        self._headers["Authorization"] = f"Bearer {self.token()}"
 91        return self._headers
 92
 93    def token(self, *args):
 94        return self.prop("token", *args)
 95
 96    def info(self):
 97        url = f"{self.schema()}://{self.host()}:{self.port()}/info"
 98        try:
 99            r = requests.get(url, timeout=self.http_timeout())
100            if r.status_code < 200 or r.status_code > 299:
101                err_msg = f"failed to show info due to {r.text}"
102                self._logger.error(err_msg)
103                raise TimeplusAPIError("get", r.status_code, err_msg)
104            else:
105                return r.json()
106        except Exception as e:
107            raise e
108
109    def ping(self):
110        url = f"{self.schema()}://{self.host()}:{self.port()}/health"
111        try:
112            r = requests.get(url, timeout=self.http_timeout())
113            if r.status_code < 200 or r.status_code > 299:
114                err_msg = f"failed to ping due to {r.text}"
115                self._logger.error(err_msg)
116                raise TimeplusAPIError("get", r.status_code, err_msg)
117            else:
118                return r.json()
119        except Exception as e:
120            raise e
121
122    def logger(self):
123        return self._logger
124
125    def http_timeout(self):
126        return self._http_timeout

Env class defines running environment of Timeplus.

#   Env()
View Source
39    def __init__(self):
40        Base.__init__(self)
41        self.host("localhost")
42        self.port("8000")
43        self.schema("http")
44        self.prop("token", "")
45
46        self._headers = CaseInsensitiveDict()
47        self._headers["Accept"] = "application/json"
48        self._headers["Content-Type"] = "application/json"
49        self._headers["Timeplus-Request-From"] = "gluon"
50        self._http_timeout = 10
51
52        Env.add(self)
53        self._logger = logger
#  
@classmethod
def add(cls, env):
View Source
55    @classmethod
56    def add(cls, env):
57        if cls._envs is None:
58            cls._envs = []
59
60        cls._envs.append(env)
61
62        if len(cls._envs) == 1:
63            cls._current_env = env
#  
@classmethod
def current(cls):
View Source
65    @classmethod
66    def current(cls):
67        return cls._current_env
#  
@classmethod
def setCurrent(cls, env):
View Source
69    @classmethod
70    def setCurrent(cls, env):
71        cls._current_env = env
#  
@classmethod
def envs(cls):
View Source
73    @classmethod
74    def envs(cls):
75        return cls._envs
#   def host(self, *args):
View Source
77    def host(self, *args):
78        return self.prop("host", *args)
#   def port(self, *args):
View Source
80    def port(self, *args):
81        return self.prop("port", *args)
#   def schema(self, *args):
View Source
83    def schema(self, *args):
84        return self.prop("schema", *args)
#   def base_url(self):
View Source
86    def base_url(self):
87        return f"{self.schema()}://{self.host()}:{self.port()}/api/v1beta1"
#   def headers(self):
View Source
89    def headers(self):
90        self._headers["Authorization"] = f"Bearer {self.token()}"
91        return self._headers
#   def token(self, *args):
View Source
93    def token(self, *args):
94        return self.prop("token", *args)
#   def info(self):
View Source
 96    def info(self):
 97        url = f"{self.schema()}://{self.host()}:{self.port()}/info"
 98        try:
 99            r = requests.get(url, timeout=self.http_timeout())
100            if r.status_code < 200 or r.status_code > 299:
101                err_msg = f"failed to show info due to {r.text}"
102                self._logger.error(err_msg)
103                raise TimeplusAPIError("get", r.status_code, err_msg)
104            else:
105                return r.json()
106        except Exception as e:
107            raise e
#   def ping(self):
View Source
109    def ping(self):
110        url = f"{self.schema()}://{self.host()}:{self.port()}/health"
111        try:
112            r = requests.get(url, timeout=self.http_timeout())
113            if r.status_code < 200 or r.status_code > 299:
114                err_msg = f"failed to ping due to {r.text}"
115                self._logger.error(err_msg)
116                raise TimeplusAPIError("get", r.status_code, err_msg)
117            else:
118                return r.json()
119        except Exception as e:
120            raise e
#   def logger(self):
View Source
122    def logger(self):
123        return self._logger
#   def http_timeout(self):
View Source
125    def http_timeout(self):
126        return self._http_timeout
Inherited Members
timeplus.base.Base
prop
data
id