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.
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
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
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