lbxtoolkit 2.2.4__tar.gz → 2.2.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/PKG-INFO +1 -1
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/lbxtoolkit/api_rest.py +21 -6
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/lbxtoolkit/lbx_logger.py +30 -13
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/lbxtoolkit/service.py +2 -1
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/pyproject.toml +1 -1
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/README.md +0 -0
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/lbxtoolkit/__init__.py +0 -0
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/lbxtoolkit/auth_entra_id.py +0 -0
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/lbxtoolkit/config_manager.py +0 -0
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/lbxtoolkit/misc.py +0 -0
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/lbxtoolkit/postgresql.py +0 -0
- {lbxtoolkit-2.2.4 → lbxtoolkit-2.2.6}/lbxtoolkit/service_windows.py +0 -0
|
@@ -84,6 +84,15 @@ Quando se usa o verbo `get` e se espera o retorno de algum dado, use o método `
|
|
|
84
84
|
Para uso em APIs com autenticação JWT (JSON Web Token), OAuth, Bearer Token Authentication, a construção é a mesma indicada acima, bastando-se usar `.auth_bearer()` ao invés de _.auth_basic()_, e ajustar o dicionário `credenciais` informado no instanciamento da classe, que deve ser estruturado conforme o padrão fornecido peo mantendor da API e será enviado como payload ao endpoint (`json=credenciais`).
|
|
85
85
|
|
|
86
86
|
"""
|
|
87
|
+
class CustomError(Exception):
|
|
88
|
+
"""
|
|
89
|
+
Sob uma mensagem de erro customizada, exibindo a mensagem recebida como parametro.
|
|
90
|
+
"""
|
|
91
|
+
def __init__(self, mensagem):
|
|
92
|
+
self.message = mensagem
|
|
93
|
+
super().__init__(self.message)
|
|
94
|
+
|
|
95
|
+
|
|
87
96
|
def __init__(self, url, credenciais, cadencia=3, timeout=6, logger=None, headers={"Content-Type": "application/json"}, verify=True):
|
|
88
97
|
self.logger = logger if not logger is None else lbx_logger(None, logging.DEBUG, '%(levelname)s: %(message)s') # se não fornecer o logger, vai tudo para o console
|
|
89
98
|
|
|
@@ -135,7 +144,8 @@ Para uso em APIs com autenticação JWT (JSON Web Token), OAuth, Bearer Token Au
|
|
|
135
144
|
#print(f'Retorno: {Auth.text}')
|
|
136
145
|
return self.Sessao
|
|
137
146
|
except Exception as Err:
|
|
138
|
-
self.logger.critico(f"Falha ao autenticar API: {Err}. URL: {self.Url}"
|
|
147
|
+
self.logger.critico(f"Falha ao autenticar API: {Err}. URL: {self.Url}")
|
|
148
|
+
return Err
|
|
139
149
|
#
|
|
140
150
|
#
|
|
141
151
|
def auth_bearer(self): # Autentica e abre sessão na API
|
|
@@ -149,9 +159,11 @@ Para uso em APIs com autenticação JWT (JSON Web Token), OAuth, Bearer Token Au
|
|
|
149
159
|
self.Sessao.token = Token.text
|
|
150
160
|
return self.Sessao
|
|
151
161
|
else:
|
|
152
|
-
self.logger.critico(f"Erro ao autenticar API: {Token.status_code} - {Token.text}"
|
|
162
|
+
self.logger.critico(f"Erro ao autenticar API: {Token.status_code} - {Token.text}")
|
|
163
|
+
raise Exception
|
|
153
164
|
except Exception as Err:
|
|
154
|
-
self.logger.critico(f"Falha ao autenticar API: {Err}. URL: {self.Url}"
|
|
165
|
+
self.logger.critico(f"Falha ao autenticar API: {Err}. URL: {self.Url}")
|
|
166
|
+
return Err
|
|
155
167
|
#
|
|
156
168
|
#
|
|
157
169
|
def endpoint_json(self, endpoint, metodo, payload=None): # Interage com End Point
|
|
@@ -170,14 +182,17 @@ Para uso em APIs com autenticação JWT (JSON Web Token), OAuth, Bearer Token Au
|
|
|
170
182
|
try:
|
|
171
183
|
self.RetEndPoint = eval(ChamadaApi)
|
|
172
184
|
if self.RetEndPoint.status_code >= 500:
|
|
173
|
-
self.logger.critico(f'Erro {self.RetEndPoint.status_code} na chamada do endpoint: {Err}\nEndpoint: {self.EndPoint}\nResposta: {self.RetEndPoint.text}'
|
|
185
|
+
self.logger.critico(f'Erro {self.RetEndPoint.status_code} na chamada do endpoint: {Err}\nEndpoint: {self.EndPoint}\nResposta: {self.RetEndPoint.text}')
|
|
186
|
+
raise Exception
|
|
174
187
|
self.RetEndPoint.Espera = self.Espera ## adiona o tempo de espera ao retorno da API
|
|
175
188
|
self.RetEndPoint.Intervalo = self.Intervalo ## adiciona o intervalo entre chamada ao retorno da API
|
|
176
189
|
return self.RetEndPoint
|
|
177
190
|
except requests.exceptions.ReadTimeout as Err:
|
|
178
|
-
self.logger.critico(f'Excedido tempo limite {self.Timeout} para retorno do endpoint: {Err}\nEndpoint: {self.EndPoint}'
|
|
191
|
+
self.logger.critico(f'Excedido tempo limite {self.Timeout} para retorno do endpoint: {Err}\nEndpoint: {self.EndPoint}')
|
|
192
|
+
return Err
|
|
179
193
|
except Exception as Err:
|
|
180
|
-
self.logger.critico(f'Falha na chamada do endpoint: {Err}\nEndpoint: {self.EndPoint}\nCodigo retorno: {self.RetEndPoint.status_code}\nResposta:{self.RetEndPoint.text}'
|
|
194
|
+
self.logger.critico(f'Falha na chamada do endpoint: {Err}\nEndpoint: {self.EndPoint}\nCodigo retorno: {self.RetEndPoint.status_code}\nResposta:{self.RetEndPoint.text}')
|
|
195
|
+
return Err
|
|
181
196
|
#
|
|
182
197
|
#
|
|
183
198
|
def trata_erro_sienge(CodRet, Retorno):
|
|
@@ -217,6 +217,23 @@ for line in filtered_lines:
|
|
|
217
217
|
self.logger.error("Exceção não prevista", exc_info=(exc_type, exc_value, exc_traceback))
|
|
218
218
|
#
|
|
219
219
|
#
|
|
220
|
+
def input(self, prompt=''):
|
|
221
|
+
"""
|
|
222
|
+
Método personalizado para capturar entrada sem interferência do logger.
|
|
223
|
+
Temporariamente restaura o stdout original.
|
|
224
|
+
"""
|
|
225
|
+
# Restaurar stdout para o original
|
|
226
|
+
sys.stdout = self.original_stdout
|
|
227
|
+
|
|
228
|
+
# Capturar entrada do usuário
|
|
229
|
+
user_input = input(prompt)
|
|
230
|
+
|
|
231
|
+
# Voltar a redirecionar stdout para o logger
|
|
232
|
+
sys.stdout = self
|
|
233
|
+
|
|
234
|
+
return user_input
|
|
235
|
+
#
|
|
236
|
+
#
|
|
220
237
|
def print(self, *args, **kwargs):
|
|
221
238
|
# Imprime diretamente na saída padrão
|
|
222
239
|
print(*args, **kwargs, file=self.original_stdout)
|
|
@@ -391,20 +408,20 @@ class SafeLogger: ## intercepta as entradas de log para parar o daemon/watcher q
|
|
|
391
408
|
if callable(original_attr):
|
|
392
409
|
def wrapper(*args, **kwargs):
|
|
393
410
|
#if 'exit' in kwargs and (Args.d or not (Args.d or Args.f)): #não tentar para o daemon se execucção interativa
|
|
394
|
-
if 'exit' in kwargs and self.daemon: #não tentar para o daemon se execucção interativa
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
411
|
+
if 'exit' in kwargs and isinstance(kwargs['exit'], int) and self.daemon: #não tentar para o daemon se execucção interativa
|
|
412
|
+
if not self.daemon.exit: # Verifica se o daemon já foi interrompido
|
|
413
|
+
evento = 'CRASH' if kwargs['exit'] != 0 else 'STOP'
|
|
414
|
+
msg1 = 'um erro ocorreu. Interceptando log para interromper daemon/watcher...' if kwargs['exit'] != 0 else \
|
|
415
|
+
'Interrompendo daemon/watcher...'
|
|
416
|
+
msg2 = 'daemon/watcher interrompido... exibindo o erro interceptado: ' if kwargs['exit'] != 0 else \
|
|
417
|
+
'daemon/watcher interrompido!'
|
|
418
|
+
|
|
419
|
+
self.log.aviso(msg1)
|
|
420
|
+
self.daemon.stop(evento)
|
|
421
|
+
self.log.aviso(msg2)
|
|
422
|
+
|
|
403
423
|
result = original_attr(*args, **kwargs)
|
|
404
|
-
|
|
405
|
-
# log.aviso('Saindo...')
|
|
406
|
-
# os._exit(kwargs['exit'])
|
|
407
|
-
return result
|
|
424
|
+
return result
|
|
408
425
|
return wrapper
|
|
409
426
|
else:
|
|
410
427
|
return original_attr
|
|
@@ -171,7 +171,8 @@ class ServicerConfig(Servicer):
|
|
|
171
171
|
self.IP = socket.gethostbyname(socket.gethostname())
|
|
172
172
|
self.Host = socket.gethostname()
|
|
173
173
|
self.Usuario = os.getlogin() if self.OS == 'Windows' else os.path.expanduser('~').split(r'/')[1]
|
|
174
|
-
self.Me = os.path.abspath(__file__)
|
|
174
|
+
#self.Me = os.path.abspath(__file__) ## estava retornando o service.py do lbxtoolkit ao invés de retornar o script que está em execução.
|
|
175
|
+
self.Me = os.path.abspath(sys.argv[0])
|
|
175
176
|
self.PIDDir = Path('.') if not piddir else piddir
|
|
176
177
|
self.PIDFile = Path(self.PIDDir,str(self.PID))
|
|
177
178
|
self.exit = False
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|