lbxtoolkit 2.2.2__py3-none-any.whl → 2.2.3__py3-none-any.whl
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/config_manager.py +1 -1
- lbxtoolkit/service.py +1 -1
- lbxtoolkit/service_windows.py +4 -4
- {lbxtoolkit-2.2.2.dist-info → lbxtoolkit-2.2.3.dist-info}/METADATA +227 -227
- {lbxtoolkit-2.2.2.dist-info → lbxtoolkit-2.2.3.dist-info}/RECORD +6 -6
- {lbxtoolkit-2.2.2.dist-info → lbxtoolkit-2.2.3.dist-info}/WHEEL +0 -0
lbxtoolkit/config_manager.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
class ConfigManager: # Inicializa e recupera variáveis em ambiente de intercâmbio entre classes
|
|
2
2
|
"""
|
|
3
|
-
#### Classe **
|
|
3
|
+
#### Classe **ConfigManager**
|
|
4
4
|
|
|
5
5
|
É um singleton que garante que todas as partes do código usem a mesma instância e, portanto, compartilhem a mesma configuração.
|
|
6
6
|
|
lbxtoolkit/service.py
CHANGED
|
@@ -145,7 +145,7 @@ class ServicerConfig(Servicer):
|
|
|
145
145
|
if __name__ == "__main__":
|
|
146
146
|
|
|
147
147
|
Daemon.main()
|
|
148
|
-
|
|
148
|
+
```
|
|
149
149
|
"""
|
|
150
150
|
def __init__(self, Log=None, piddir=None):#TODO: ao criar uma classe padrão usar args/kwargs para lidar como parametros variáveis no instanciamento
|
|
151
151
|
# PRE-REQUISITOS/DEPENDÊNCIAS:
|
lbxtoolkit/service_windows.py
CHANGED
|
@@ -18,10 +18,10 @@ class ServicoWindows(win32serviceutil.ServiceFramework): # Gerencia a execução
|
|
|
18
18
|
|
|
19
19
|
Gerencia a instalação e execução de um daemon como um serviço do windows. Também assume o controle dos argumentos recebidos via linha de comando.
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
- `SvcInstall`: Cria um serviço do windows com base neste script
|
|
22
|
+
- `SvcRemove`: Remove o serviço do windows configurado à partir de `SvcInstall`
|
|
23
|
+
- `SvcStop`: Para/Interrompe a execução do serviço do windows criado por este script (método herdado da classe pai _win32serviceutil.ServiceFramework_ invocado automaticamente pela chamada do service manager do windows)
|
|
24
|
+
- `SvcDoRun`: Inicializa a execução do serviço do windows criado por este script (método herdado da classe pai _win32serviceutil.ServiceFramework_ invocado autoamticamente pela chamada do service manager do windwos)
|
|
25
25
|
"""
|
|
26
26
|
_svc_name_ = None
|
|
27
27
|
_svc_display_name_ = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: lbxtoolkit
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.3
|
|
4
4
|
Summary:
|
|
5
5
|
Author: Cristiano P. Ferrari
|
|
6
6
|
Author-email: cristiano.ferrari@lbx.com.br
|
|
@@ -43,66 +43,66 @@ print(help)
|
|
|
43
43
|
|
|
44
44
|
**auth_EntraID**
|
|
45
45
|
Usa o Microsoft Entra ID (antiga Azure AD) para evitar execução não autorizada de scripts
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
- `disclaimer` : Mensagem sobre a necessidade de autenticação
|
|
47
|
+
- `valida_grupo` : Autentica o usuário e aborta se checa não pertencer ao grupo de segurança
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
**postgreSQL**
|
|
51
51
|
Interage com o banco de dados PostgreSQL
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
- `db` Inicia sessão com o banco
|
|
53
|
+
- `csv_df` Lê arquivo CSV e gera Dataframe (pandas) a partir dele
|
|
54
|
+
- `db_insert_df` Insere informações de Dataframe em tabela do banco com estrutura equivalente
|
|
55
|
+
- `db_select` Retorna um cursor a partir de uma query
|
|
56
|
+
- `db_update` Executa update em tabelas
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
**api_rest**
|
|
60
60
|
Interage com APIs RESTfull, especialmente providas para a plataforma Sienge
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
- `auth_base` Autentica (HTTPBasicAuth) sessão na API
|
|
62
|
+
- `auth_bearer` Autentica sessão na API pelos métodos: OAuth, JWT, Bearer
|
|
63
|
+
- `endpoint_json` Realizad chama ao endpoint. Payload em formato `json` opcional.
|
|
64
|
+
- `trata_erro_sienge` Retorna a mensagem de erro do Sienge caso código de retorno seja diferente de 200.
|
|
65
|
+
- `close` Encerra a sessão autenticada
|
|
66
66
|
|
|
67
67
|
**lbx_logger**
|
|
68
68
|
Manipula e formata as mensagens de saída do script para direcioná-las para tela (stdout) e/ou arquivo de log
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
- `add` Adiciona a mensagem a um _buffer_ sem exibir, acumulando até a próxima chamada em algum dos níveis abaixo.
|
|
70
|
+
- `print` Contorna o manipulador de log e imprime diretamente na tela (stdout), sem formatar a mensagem nem registrar no arquivo
|
|
71
|
+
- `debug, .info, .aviso, .erro, .critico` Classifica as mensagens por nível de severidade/relevância e rediciona a saída (arquivo, tela, tela+arquivo) conforme a configuração do nível
|
|
72
|
+
- `stop_logging` Interrompe a manipulação das saídas pelo logger e restaura as saídas padrão (stdout/stderr) para a tela
|
|
73
|
+
- `filtra` Filtra os eventos do arquivo de log registrados em um intervalo de tempo específico
|
|
74
74
|
|
|
75
75
|
**SafeLogger**
|
|
76
76
|
Intercepta as ordens de saída comandadas pelos métodos de lbx_logger e interrompe um daemon em execução antes de saír
|
|
77
77
|
|
|
78
78
|
**ConfigManager**
|
|
79
79
|
Permite a inicialização/instanciamento e o consumo de objetos entre classes e métodos independentes, inclusive métodos estáticos (sem instanciamento da classe), garantindo que todas as partes do código usem a mesma instância e, portanto, compartilhem a mesma configuração.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
- `initialize` Inicialização com Argumentos Dinâmicos: O método initialize usa **kwargs para aceitar qualquer número de pares chave-valor, armazenando-os no dicionário da instância.
|
|
81
|
+
- `get` O método get aceita uma chave como argumento e retorna o valor correspondente do dicionário _config.
|
|
82
|
+
- `set` O método set permite adicionar ou atualizar dinamicamente valores no dicionário _config.
|
|
83
|
+
- `reset` O método reset limpa todas as configurações armazenadas, permitindo uma nova inicialização do ConfigManager com novos valores
|
|
84
84
|
|
|
85
85
|
**ServicoWindows**
|
|
86
86
|
Gerencia a instalação e execução de um daemon como um serviço do windows. Também assum o controle dos argumentos recebidos via linha de comando.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
- `SvcInstall` Cria um serviço do windows com base neste script
|
|
88
|
+
- `SvcRemove` Remove o serviço do windows configurado à partir de `SvcInstall`
|
|
89
|
+
- `SvcStop` Para/Interrompe a execução do serviço do windows criado por este script (método herdado da classe pai _win32serviceutil.ServiceFramework_)
|
|
90
|
+
- `SvcDoRun` Inicializa a execução do serviço do windows criado por este script (método herdado da classe pai _win32serviceutil.ServiceFramework_)
|
|
91
91
|
|
|
92
92
|
**Servicer**
|
|
93
93
|
Classe base com a esrtutura padrão para a criação dameons/serviços do windows.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
- `run`, `stop` Usados para iniciar (`run`) e parar (`stop`) a execução do daemon/serviço.
|
|
95
|
+
- `main` deve ser chamada para controlar a sua chamada inicial do script, tratando os argumentos da linha de comando
|
|
96
|
+
- `on_run` é o método que efetivamente executa o propósito do script quando o método pai `run` é executado
|
|
97
|
+
- `args_parser` é o método que define o comportamento do script quando o método `main` é executado (**`argpaser`**)
|
|
98
98
|
|
|
99
99
|
**misc**
|
|
100
100
|
Classe de miscelâneas/diversos
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
101
|
+
- `seleciona_arquivo` Abre um picker do sistema operacionar para selecionar um *arquivo* e retorna seu path
|
|
102
|
+
- `seleciona_dir` Abre um picker do sistema operacionar para selecionar um *diretório* e retorna seu path
|
|
103
|
+
- `normaliza` Limpa caracteres especiais e espaços de strings e retorna tudo em minúsculo
|
|
104
|
+
- `get_cmd_window` Captura a referencia da janela atual (cmd.exe) para retornar o foco à ela depois de chamar os pickers
|
|
105
|
+
- `maximize_console` Maxima a janela do console (cmd.exe)
|
|
106
106
|
|
|
107
107
|
## Instalação e uso:
|
|
108
108
|
|
|
@@ -194,7 +194,7 @@ Payload = {
|
|
|
194
194
|
}
|
|
195
195
|
EndPoint = f'{UrlBase}/bills/{Nutitulo}/installments/{Nuparcela}'
|
|
196
196
|
|
|
197
|
-
|
|
197
|
+
#chama o endpoint e recebe o retorno no objeto AlteraVcto
|
|
198
198
|
AlteraVcto = ApiSienge.endpoint_json(EndPoint, 'patch', Payload)
|
|
199
199
|
```
|
|
200
200
|
|
|
@@ -222,8 +222,8 @@ Este recurso tem o propósito de controlar as permissões de execução do scrip
|
|
|
222
222
|
|
|
223
223
|
Essa classe possui apenas dois métodos:
|
|
224
224
|
|
|
225
|
-
|
|
226
|
-
|
|
225
|
+
- `auth_EntraID.disclaimer()`: apenas exibe uma tela de informações/instruções ao usuário.
|
|
226
|
+
- `auth_EntraID.valida_grupo([client_id], [client_secret], [tenant_id], timeout=60, log_file='auth_EntraID.log')`: efetua a autenticação do usuário e verifica se ele pertence ao grupo informado, abortando a execução caso não pertença ao grupo ou a autenticação não seja validada no tempo estabelecido. Os argumentos `timeout` e `log_file` são opcionais e, se omitidos, os valores aqui atribuídos serão adotados como padrão.
|
|
227
227
|
|
|
228
228
|
É necessário obter parametros da plataforma de identidade da Microsoft (AD Azure, agora Microsoft Entra ID), no [*Centro de administração do Microsoft Entra*](https://entra.microsoft.com).
|
|
229
229
|
Sugerimos não armazenar estas ou outras informações sensíveis no script. Considere usar o pacote `dotenv` para isso.
|
|
@@ -252,7 +252,7 @@ auth.disclaimer()
|
|
|
252
252
|
|
|
253
253
|
auth.valida_grupo('Nome do Grupo de Distribuição')
|
|
254
254
|
# se usuário não pertencer a grupo informado, a execução do script é abortada.
|
|
255
|
-
|
|
255
|
+
```
|
|
256
256
|
|
|
257
257
|
<a id="lbxtoolkit.config_manager"></a>
|
|
258
258
|
|
|
@@ -266,7 +266,7 @@ auth.valida_grupo('Nome do Grupo de Distribuição')
|
|
|
266
266
|
class ConfigManager()
|
|
267
267
|
```
|
|
268
268
|
|
|
269
|
-
#### Classe **
|
|
269
|
+
#### Classe **ConfigManager**
|
|
270
270
|
|
|
271
271
|
É um singleton que garante que todas as partes do código usem a mesma instância e, portanto, compartilhem a mesma configuração.
|
|
272
272
|
|
|
@@ -307,35 +307,35 @@ Todos os parametros são nominativos e facultativos. Em caso de omissão, os val
|
|
|
307
307
|
|
|
308
308
|
Os parametros para o instanciamento da classe são:
|
|
309
309
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
310
|
+
- `log_file_path`: Define o caminho e o nome do arquivo de log. Se omisso, as mensagens serão todas direcionadas apenas para a tela.
|
|
311
|
+
- `log_level`: Define o nível mínimo de severidade das mensagens a serem manipuladas pelo logger. Se omisso, será assumido o nível mais baixo (_debug_). As mensagens com nível abaixo do especificado são descartadas. Os níveis devem ser informados de acordo com a sintaxe acima (prefixados com _logging._ e com o nome do nível em inglês e maiúsculas). Exemplo:
|
|
312
|
+
- `logging.DEBUG`: para manipular chamadas do método *.debug()* e acima.
|
|
313
|
+
- `logging.INFO`: para manipular chamadas do método *.info()* e acima.
|
|
314
|
+
- `logging.WARNING`: para manipular chamadas do método *.aviso()* e acima.
|
|
315
|
+
- `logging.ERROR`: para manipular chamadas do método *.erro()* e acima.
|
|
316
|
+
- `logging.CRITICAL`: para manipular chamadas do método *.critico()* e acima.
|
|
317
|
+
- `formato_log`: Define o formato em que a mensagem será apresentada. Se omisso, o padrá é *DATA_HORA - NIVEL - MENSAGEM*. Para maiores opções veja: [Atributos de log](https://docs.python.org/3/library/logging.html#logrecord-attributes)
|
|
318
|
+
- `modulo`: Nome do módulo para o qual os logs serão monitorados. Permite instanciar várias vezes a classe para criar manipuladores diferentes para módulos diferente. Informe o nome do módulo para criar um log específico para ele ou simplesmente omita o parametro para criar um log para o script em geral.
|
|
319
|
+
- `ignore_console`: Lista com os níveis de severidade a serem ignorados para *apresentação na tela*, registrando *apenas no arquivo* (quando informado no parametro `log_file_path`) e obedecendo ao nível mínimo estabelecido no parametro `log_level`. Note que omitir o parametro `log_file_path` e incluir um nível na lsita `ignore_console` implica em ignorar/suprimir esse nível de mensagem de qualquer apresentação.
|
|
320
|
+
- `ignore_file`: Mesma lógica do parametro `ignore_console`, mas com lógica invertida: suprime o registro do nível do arquivo e demonstra *apenas na tela*.
|
|
321
321
|
|
|
322
322
|
1. As mensagem são manipuladas substituindo-se o comando `print()` pela chamada a um dos 5 métodos acima (_.add(), .debug(), .info(), .aviso(), .erro(), .critico()_). Exceto o método `.add()`, qualquer um dos demais métodos pode interromper a execução do script, através da passagem do parâmetro `exit`. Ao informar esse parametro na chamadada do método, atribua a ele o código de saída desejado (0 para normal, qualquer outro número para saída com erro). Exemplo:
|
|
323
323
|
|
|
324
|
-
```python
|
|
325
|
-
log.erro('Essa mensagem apenas resulta em uma mensagem de nível ERROR')
|
|
326
|
-
log.erro('Essa mensagem resulta em uma mensagem de nível ERRO e encerra o script com código de retorno -1', exit=-1)
|
|
327
|
-
```
|
|
324
|
+
```python
|
|
325
|
+
log.erro('Essa mensagem apenas resulta em uma mensagem de nível ERROR')
|
|
326
|
+
log.erro('Essa mensagem resulta em uma mensagem de nível ERRO e encerra o script com código de retorno -1', exit=-1)
|
|
327
|
+
```
|
|
328
328
|
|
|
329
329
|
Qualquer chamada ao comando `print()`, uma vez instanciado manipulador de log, será registada como uma chamada ao método _.info()_ e registrada com este nível de severidade.
|
|
330
330
|
Para retornar ao comportamente padrão do comando print, ou interromper o manipulador, faça chamada ao método `.stop_logging()`
|
|
331
331
|
|
|
332
332
|
2. O método _.add()_ não exibe/grava imediatamente a mensagem, mas apenas a diciona a _buffer_. Todas as chamas a _.add()_ irão concatenar a mensagem recebida até a próxima chamada em algum dos níveis _.debug(), .info(), .aviso(), .erro(), .critico()_. Na primeira chama de um destes níveis após uma (ou mais) chamada(s) ao método _.add()_ o *buffer* será concatenado à mensagem recebida por um destes métodos e o resultado será manipulado pelo log conforme os parametros definidos no intanciamento da classe e o método chamado. Essa função é útil para tratar mensagens com retorno condicional. Exemplo:
|
|
333
333
|
|
|
334
|
-
```python
|
|
335
|
-
log.add('Mensagem 1# ') ## não será exibida/registrada
|
|
336
|
-
log.add('Mensagem 2# ') ## não será exibida/registrada
|
|
337
|
-
log.info('Mensagem 3) ## será exibida/registrada como nível "info" e com texto: "Mensagem 1# Mensagem 2# Mensagem 3"
|
|
338
|
-
```
|
|
334
|
+
```python
|
|
335
|
+
log.add('Mensagem 1# ') ## não será exibida/registrada
|
|
336
|
+
log.add('Mensagem 2# ') ## não será exibida/registrada
|
|
337
|
+
log.info('Mensagem 3) ## será exibida/registrada como nível "info" e com texto: "Mensagem 1# Mensagem 2# Mensagem 3"
|
|
338
|
+
```
|
|
339
339
|
|
|
340
340
|
3. Os métodos que exibem as mensagens (`.debug()`,`.info()`,`.aviso()`, `.erro()`, `.critico()`) possuem 3 parametros: `message`, `corte=None`, `exit=None`.
|
|
341
341
|
|
|
@@ -345,88 +345,88 @@ log.info('Mensagem 3) ## será exibida/registrada como nível "info" e com texto
|
|
|
345
345
|
|
|
346
346
|
4. O método `.filtra()` possui 3 parametros posicionais, todos opcionais: `log_file`, `dh_ini`, `dh_fim`.
|
|
347
347
|
|
|
348
|
-
Se os 3 forem omitidos, serão exibidas as entradas de log do arquivo corrente, definido no instanciamento da classe `lbx_logger`, registradas na última hora. Deste modo, o valor padrão para `dh_fim` é `now()` e para `dh_ini` é `now()` menos 1 hora.
|
|
348
|
+
Se os 3 forem omitidos, serão exibidas as entradas de log do arquivo corrente, definido no instanciamento da classe `lbx_logger`, registradas na última hora. Deste modo, o valor padrão para `dh_fim` é `now()` e para `dh_ini` é `now()` menos 1 hora.
|
|
349
349
|
|
|
350
|
-
Caso queira filtrar os registro de outro arquivo de log, que não seja o do script corrente, informe o endereço do arquivo no primeiro parametro.
|
|
350
|
+
Caso queira filtrar os registro de outro arquivo de log, que não seja o do script corrente, informe o endereço do arquivo no primeiro parametro.
|
|
351
351
|
|
|
352
|
-
E caso queira alterar alterar o período de filtragem, informe nos parametros 2 e 3 a data/hora de início e fim do período. Estes dois parametros aceitam tanto um objeto do tipo `datetime` como uma string (que será convertida para datetime), desde que ela esteja no formato `dd/mm/aaaa hh:mm:[ss]` (segundos são opcionais).
|
|
352
|
+
E caso queira alterar alterar o período de filtragem, informe nos parametros 2 e 3 a data/hora de início e fim do período. Estes dois parametros aceitam tanto um objeto do tipo `datetime` como uma string (que será convertida para datetime), desde que ela esteja no formato `dd/mm/aaaa hh:mm:[ss]` (segundos são opcionais).
|
|
353
353
|
|
|
354
|
-
Considerando que os parametros são posicionais, caso queira omitir apenas um dos parametros, preencha a posição do parametro a ser omitido com `None`.
|
|
354
|
+
Considerando que os parametros são posicionais, caso queira omitir apenas um dos parametros, preencha a posição do parametro a ser omitido com `None`.
|
|
355
355
|
|
|
356
|
-
A saída dessa função retorna um objeto, que pode ser salvo em disco ou impresso na tela.
|
|
356
|
+
A saída dessa função retorna um objeto, que pode ser salvo em disco ou impresso na tela.
|
|
357
357
|
|
|
358
358
|
|
|
359
359
|
5. Exemplos de uso:
|
|
360
360
|
|
|
361
|
-
```python
|
|
362
|
-
from lbx_toolkit import lbx_logger
|
|
363
|
-
import logging
|
|
364
|
-
import os
|
|
365
|
-
from pathlib import Path
|
|
366
|
-
|
|
367
|
-
DirBase = Path('./') # diretório corrente do script
|
|
368
|
-
BaseName = os.path.splitext(os.path.basename(__file__))[0] # nome do script sem extensão
|
|
369
|
-
LogFile = Path(DirBase, BaseName + '.log') # salva logs no diretório corrente, em um arquivo nomeado com nome do script + extensão ".log"
|
|
370
|
-
|
|
371
|
-
### instancia o manipulador para tratar todas as mensagens (nível DEBUG acima),
|
|
372
|
-
# mas suprime a apresentação em tela das mensagens de nível "DEBUG" na tela,
|
|
373
|
-
# apenas registrando-as somente no arquivo
|
|
374
|
-
# e sumprime o registro no arquivo das mensagens de nível "ERROR",
|
|
375
|
-
# mostrando-as apenas na tela
|
|
376
|
-
log = lbx_logger(LogFile, logging.DEBUG, ignore_console=[logging.DEBUG], ignore_file=[logging.ERROR])
|
|
377
|
-
|
|
378
|
-
# Exemplo de mensagens de log
|
|
379
|
-
log.debug('Esta é uma mensagem de debug')
|
|
380
|
-
log.info('Esta é uma mensagem informativa')
|
|
381
|
-
log.add('Esta mensagem não será exibida agora, mas acumulada no buffer# ')
|
|
382
|
-
log.aviso('Esta é uma mensagem de aviso')
|
|
383
|
-
log.erro('Esta é uma mensagem de erro')
|
|
384
|
-
log.erro('Esta é uma mensagem erro muito comprida e será limitada a 40 caracteres, o restante será cortado e ingorado ao ser manipulado', 40)
|
|
385
|
-
log.critico('Esta é uma mensagem crítica')
|
|
386
|
-
|
|
387
|
-
# Exemplo de função que gera uma exceção
|
|
388
|
-
def funcao_com_erro():
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
# Testando redirecionamento de print e captura de exceção
|
|
392
|
-
print('Mensagem de teste via print')
|
|
393
|
-
try:
|
|
394
|
-
|
|
395
|
-
except Exception as e:
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
log.erro('Essa é uma mensagem de erro e abortará a execução do script', exit=1)
|
|
399
|
-
|
|
400
|
-
log.info('Essa mensagem não será exibida pois o script foi abortado na mensagem anterior')
|
|
401
|
-
|
|
402
|
-
# obtem os registros de log da última hora (comportamento padrão)
|
|
403
|
-
filtra_log = log.search()
|
|
404
|
-
|
|
405
|
-
# obtem os registros das últimas 6 horas
|
|
406
|
-
ultimas_6h = datetime.datetime.now() - datetime.timedelta(hours=6) ## carimbo de tempo de 6 horas atrás !!! requer import datetime
|
|
407
|
-
filtra_log = log.search(None, ultimas_6h) # None no 1º parametro impõe o log do arquivo corrente como padrão (definido em 'LogFile' e apontado no instanciamento da classe)
|
|
408
|
-
|
|
409
|
-
# obtem os registros do dia 14/01/2020 até 3h atrás
|
|
410
|
-
ultimas_3h = datetime.datetime.now() - datetime.timedelta(hours=3) ## carimbo de tempo de 6 horas atrás !!! requer import datetime
|
|
411
|
-
filtra_log = log.search(None, '14/01/2020 00:00', ultimas_3h) #
|
|
412
|
-
|
|
413
|
-
# obtem os registros do horário comercial do dia 23/12/2023 do arquivo salvo em C:\temp\outro_arquivo.log
|
|
414
|
-
Outro_Log = Path(r'c:\temp\outro_arquivo.log')
|
|
415
|
-
filtra_log = log.search(Outro_Log, '23/12/2023 08:00', '23/12/2023 18:00') #
|
|
416
|
-
|
|
417
|
-
# salva conteúdo filtrado em um arquivo:
|
|
418
|
-
filtrado = 'filtered_log.txt'
|
|
419
|
-
with open(filtado, 'w', encoding='ISO-8859-1') as output_file: # indique o enconding conforme salvo (UTF-8 ou ISO-8859-1)
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
# mostra o conteúdo filtrado na tela
|
|
423
|
-
print(''.join(filtra_log))
|
|
424
|
-
|
|
425
|
-
# mostra o conteúdo filtrado na tela, listando apenas as os registros do nível "DEBUG"
|
|
426
|
-
for line in filtered_lines:
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
```
|
|
361
|
+
```python
|
|
362
|
+
from lbx_toolkit import lbx_logger
|
|
363
|
+
import logging
|
|
364
|
+
import os
|
|
365
|
+
from pathlib import Path
|
|
366
|
+
|
|
367
|
+
DirBase = Path('./') # diretório corrente do script
|
|
368
|
+
BaseName = os.path.splitext(os.path.basename(__file__))[0] # nome do script sem extensão
|
|
369
|
+
LogFile = Path(DirBase, BaseName + '.log') # salva logs no diretório corrente, em um arquivo nomeado com nome do script + extensão ".log"
|
|
370
|
+
|
|
371
|
+
### instancia o manipulador para tratar todas as mensagens (nível DEBUG acima),
|
|
372
|
+
# mas suprime a apresentação em tela das mensagens de nível "DEBUG" na tela,
|
|
373
|
+
# apenas registrando-as somente no arquivo
|
|
374
|
+
# e sumprime o registro no arquivo das mensagens de nível "ERROR",
|
|
375
|
+
# mostrando-as apenas na tela
|
|
376
|
+
log = lbx_logger(LogFile, logging.DEBUG, ignore_console=[logging.DEBUG], ignore_file=[logging.ERROR])
|
|
377
|
+
|
|
378
|
+
# Exemplo de mensagens de log
|
|
379
|
+
log.debug('Esta é uma mensagem de debug')
|
|
380
|
+
log.info('Esta é uma mensagem informativa')
|
|
381
|
+
log.add('Esta mensagem não será exibida agora, mas acumulada no buffer# ')
|
|
382
|
+
log.aviso('Esta é uma mensagem de aviso')
|
|
383
|
+
log.erro('Esta é uma mensagem de erro')
|
|
384
|
+
log.erro('Esta é uma mensagem erro muito comprida e será limitada a 40 caracteres, o restante será cortado e ingorado ao ser manipulado', 40)
|
|
385
|
+
log.critico('Esta é uma mensagem crítica')
|
|
386
|
+
|
|
387
|
+
# Exemplo de função que gera uma exceção
|
|
388
|
+
def funcao_com_erro():
|
|
389
|
+
raise ValueError('Este é um erro de exemplo')
|
|
390
|
+
|
|
391
|
+
# Testando redirecionamento de print e captura de exceção
|
|
392
|
+
print('Mensagem de teste via print')
|
|
393
|
+
try:
|
|
394
|
+
funcao_com_erro()
|
|
395
|
+
except Exception as e:
|
|
396
|
+
print(f'Capturado um erro: {e}')
|
|
397
|
+
|
|
398
|
+
log.erro('Essa é uma mensagem de erro e abortará a execução do script', exit=1)
|
|
399
|
+
|
|
400
|
+
log.info('Essa mensagem não será exibida pois o script foi abortado na mensagem anterior')
|
|
401
|
+
|
|
402
|
+
# obtem os registros de log da última hora (comportamento padrão)
|
|
403
|
+
filtra_log = log.search()
|
|
404
|
+
|
|
405
|
+
# obtem os registros das últimas 6 horas
|
|
406
|
+
ultimas_6h = datetime.datetime.now() - datetime.timedelta(hours=6) ## carimbo de tempo de 6 horas atrás !!! requer import datetime
|
|
407
|
+
filtra_log = log.search(None, ultimas_6h) # None no 1º parametro impõe o log do arquivo corrente como padrão (definido em 'LogFile' e apontado no instanciamento da classe)
|
|
408
|
+
|
|
409
|
+
# obtem os registros do dia 14/01/2020 até 3h atrás
|
|
410
|
+
ultimas_3h = datetime.datetime.now() - datetime.timedelta(hours=3) ## carimbo de tempo de 6 horas atrás !!! requer import datetime
|
|
411
|
+
filtra_log = log.search(None, '14/01/2020 00:00', ultimas_3h) #
|
|
412
|
+
|
|
413
|
+
# obtem os registros do horário comercial do dia 23/12/2023 do arquivo salvo em C:\temp\outro_arquivo.log
|
|
414
|
+
Outro_Log = Path(r'c:\temp\outro_arquivo.log')
|
|
415
|
+
filtra_log = log.search(Outro_Log, '23/12/2023 08:00', '23/12/2023 18:00') #
|
|
416
|
+
|
|
417
|
+
# salva conteúdo filtrado em um arquivo:
|
|
418
|
+
filtrado = 'filtered_log.txt'
|
|
419
|
+
with open(filtado, 'w', encoding='ISO-8859-1') as output_file: # indique o enconding conforme salvo (UTF-8 ou ISO-8859-1)
|
|
420
|
+
output_file.writelines(filta_log)
|
|
421
|
+
|
|
422
|
+
# mostra o conteúdo filtrado na tela
|
|
423
|
+
print(''.join(filtra_log))
|
|
424
|
+
|
|
425
|
+
# mostra o conteúdo filtrado na tela, listando apenas as os registros do nível "DEBUG"
|
|
426
|
+
for line in filtered_lines:
|
|
427
|
+
if "DEBUG" in line:
|
|
428
|
+
print(line, end='')
|
|
429
|
+
```
|
|
430
430
|
|
|
431
431
|
<a id="lbxtoolkit.lbx_logger.SafeLogger"></a>
|
|
432
432
|
|
|
@@ -458,11 +458,11 @@ Classe que reune pequenas funções uteis para agilizar tarefas comuns.
|
|
|
458
458
|
|
|
459
459
|
Sintaxe e exemplos de uso. Parametros omissos assume-se os valores padrão indicados abaixo:
|
|
460
460
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
461
|
+
- `Arquivo = seleciona_arquivo(DirBase, TiposArquivo=[('Todos os arquivos', '*.*')], Titulo='Selecionar arquivo')`
|
|
462
|
+
- `Diretório = seleciona_dir(DirBase=Path(r'./'), Titulo='Selecionar diretório'):`
|
|
463
|
+
- `NomeLimpo = normaliza('String # SEM Noção!') # string_sem_nocao`
|
|
464
|
+
- `cmd_window = get_cmd_window()`
|
|
465
|
+
- `maximize_console()`
|
|
466
466
|
|
|
467
467
|
<a id="lbxtoolkit.postgresql"></a>
|
|
468
468
|
|
|
@@ -482,131 +482,131 @@ Recursos de interação com o banco de dados relacional PostgreSQL
|
|
|
482
482
|
|
|
483
483
|
1. O método `postgreSQl.db()` exige que as credenciais e parametros de acesso sejam fornecidas em um *dicionário* com, ao mínimo, o seguinte formato:
|
|
484
484
|
|
|
485
|
-
```python
|
|
486
|
-
credenciais = {
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
485
|
+
```python
|
|
486
|
+
credenciais = {
|
|
487
|
+
'dbname': 'NOME_BANCO',
|
|
488
|
+
'user': 'USUARIO'',
|
|
489
|
+
'password': 'SENHA',
|
|
490
|
+
'host': 'IP_OU_DNS_SERVIDOR',
|
|
491
|
+
'port': 'PORTA_POSTGRESQL', ## padrão = 5432
|
|
492
|
+
}
|
|
493
493
|
|
|
494
|
-
conexao = postgreSQL.db(credenciais)
|
|
495
|
-
```
|
|
494
|
+
conexao = postgreSQL.db(credenciais)
|
|
495
|
+
```
|
|
496
496
|
|
|
497
|
-
O nome do schema é ser declarado no contexto da query, mas se desejar alterar o schema padrão, adicione *`'options' : '-c search_path=[NOME_SCHEMA]',`* ao dicionário.
|
|
497
|
+
O nome do schema é ser declarado no contexto da query, mas se desejar alterar o schema padrão, adicione *`'options' : '-c search_path=[NOME_SCHEMA]',`* ao dicionário.
|
|
498
498
|
|
|
499
|
-
Qualquer argumento de conexão previsto no pacote *psycopg2* são aceitos como entrada no dicionário acima.
|
|
499
|
+
Qualquer argumento de conexão previsto no pacote *psycopg2* são aceitos como entrada no dicionário acima.
|
|
500
500
|
|
|
501
501
|
2. O método `postgreSQl.csv_df()` lê arquivo texto do tipo CSV e o converte para o objeto Dataframe do `pandas`. A assinatura da função exige que se forneça o caminho do arquivo CSV e, opcionalmente o caracter delimitador. Se o caracter demilitador não for informado, será assumido `;`. Considere usar a função `Path` para tratar o caminho do arquivo de origem.
|
|
502
502
|
|
|
503
|
-
```python
|
|
504
|
-
from pathlib import Path
|
|
505
|
-
arquivo_csv = Path('./diretorio/arquivo_exemplo.csv')
|
|
506
|
-
dados = postgreSQL.csv_df(arquivo_csv, CsvDelim=',') # usando vírgula como separador. se omisso, assume ";'
|
|
507
|
-
```
|
|
503
|
+
```python
|
|
504
|
+
from pathlib import Path
|
|
505
|
+
arquivo_csv = Path('./diretorio/arquivo_exemplo.csv')
|
|
506
|
+
dados = postgreSQL.csv_df(arquivo_csv, CsvDelim=',') # usando vírgula como separador. se omisso, assume ";'
|
|
507
|
+
```
|
|
508
508
|
|
|
509
509
|
1. O método `postgreSQl.db_insert_df()` insere dados a partir de um Dataframe (pandas) em uma tabela do banco com estrutura de colunas equivalente.
|
|
510
510
|
|
|
511
|
-
A assinatura da função é `postgreSQL.db_insert_df([conexao], [dataframe_origem], [tabela_destino], Schema=None, Colunas=None, OnConflict=None)`
|
|
511
|
+
A assinatura da função é `postgreSQL.db_insert_df([conexao], [dataframe_origem], [tabela_destino], Schema=None, Colunas=None, OnConflict=None)`
|
|
512
512
|
|
|
513
|
-
É necessário que os nomes das colunas do dataframe coincidam com o nome das colunas da tabela.
|
|
514
|
-
Não há como traduzir/compatibilizar (de-para) nomes de colunas entre o dataframe e a tabela.
|
|
513
|
+
É necessário que os nomes das colunas do dataframe coincidam com o nome das colunas da tabela.
|
|
514
|
+
Não há como traduzir/compatibilizar (de-para) nomes de colunas entre o dataframe e a tabela.
|
|
515
515
|
|
|
516
|
-
Os três primeiros parametros são posicionais e correspondem, respectivamente, (1) ao objeto da conexão com o banco, (2) ao objeto que contém o dataframe e (3) ao nome da tabela de destino.
|
|
517
|
-
Assume-se que a tabela pertença ao schema padrão (definido na variável _search_path_ do servidor). Caso a tabela de destino esteja em um _schema_ diferente do padrão, deve-se informar seu nome no parâmetro opcional `Schema`.
|
|
516
|
+
Os três primeiros parametros são posicionais e correspondem, respectivamente, (1) ao objeto da conexão com o banco, (2) ao objeto que contém o dataframe e (3) ao nome da tabela de destino.
|
|
517
|
+
Assume-se que a tabela pertença ao schema padrão (definido na variável _search_path_ do servidor). Caso a tabela de destino esteja em um _schema_ diferente do padrão, deve-se informar seu nome no parâmetro opcional `Schema`.
|
|
518
518
|
|
|
519
|
-
O parametro opcional `Colunas` espera um objeto do tipo _lista_ que contenha a relação das colunas a serem importadas.
|
|
520
|
-
As colunas listadas neste objeto precisam existir nas duas pontas (dataframe e tabela).
|
|
521
|
-
Caso seja omisso, todas as colunas do dataframe serão inseridas na tabela. Neste caso, admite-se que haja colunas na tabela que não exitam no dataframe (serão gravadas como NULL), mas o contrário provocará erro.
|
|
519
|
+
O parametro opcional `Colunas` espera um objeto do tipo _lista_ que contenha a relação das colunas a serem importadas.
|
|
520
|
+
As colunas listadas neste objeto precisam existir nas duas pontas (dataframe e tabela).
|
|
521
|
+
Caso seja omisso, todas as colunas do dataframe serão inseridas na tabela. Neste caso, admite-se que haja colunas na tabela que não exitam no dataframe (serão gravadas como NULL), mas o contrário provocará erro.
|
|
522
522
|
|
|
523
|
-
O último parametro opcional `OnConflict` espera uma declaração para tratar o que fazer caso o dado a ser inserido já exista na tabela, baseado na cláusula [*ON CONFLICT*](https://www.postgresql.org/docs/current/sql-insert.html#SQL-ON-CONFLICT) do comando INSERT. A claúsula deve ser declarada explicita e integralmente nessa variável (clausula, _target_ e _action_) e não há crítica/validação desse argumento, podendo gerar erros se declarado inconforme com o padrão SQL.
|
|
523
|
+
O último parametro opcional `OnConflict` espera uma declaração para tratar o que fazer caso o dado a ser inserido já exista na tabela, baseado na cláusula [*ON CONFLICT*](https://www.postgresql.org/docs/current/sql-insert.html#SQL-ON-CONFLICT) do comando INSERT. A claúsula deve ser declarada explicita e integralmente nessa variável (clausula, _target_ e _action_) e não há crítica/validação desse argumento, podendo gerar erros se declarado inconforme com o padrão SQL.
|
|
524
524
|
|
|
525
|
-
Exemplo de
|
|
525
|
+
Exemplo de uso:
|
|
526
526
|
|
|
527
|
-
```python
|
|
528
|
-
from lbx_toolkit import postgreSQL
|
|
529
|
-
from pathlib import Path
|
|
527
|
+
```python
|
|
528
|
+
from lbx_toolkit import postgreSQL
|
|
529
|
+
from pathlib import Path
|
|
530
530
|
|
|
531
|
-
credenciais = {
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
531
|
+
credenciais = {
|
|
532
|
+
'dbname': 'NOME_BANCO',
|
|
533
|
+
'user': 'USUARIO'',
|
|
534
|
+
'password': 'SENHA',
|
|
535
|
+
'host': 'IP_OU_DNS_SERVIDOR',
|
|
536
|
+
'port': 'PORTA_POSTGRESQL', ## padrão = 5432
|
|
537
|
+
}
|
|
538
538
|
|
|
539
|
-
conexao = postgreSQL.db(credenciais)
|
|
539
|
+
conexao = postgreSQL.db(credenciais)
|
|
540
540
|
|
|
541
|
-
arquivo_csv = Path('./diretorio/arquivo_exemplo.csv')
|
|
542
|
-
dados = postgreSQL.csv_df(arquivo_csv, CsvDelim=',') # usando vírgula como separador. se omisso, assume ";'
|
|
541
|
+
arquivo_csv = Path('./diretorio/arquivo_exemplo.csv')
|
|
542
|
+
dados = postgreSQL.csv_df(arquivo_csv, CsvDelim=',') # usando vírgula como separador. se omisso, assume ";'
|
|
543
543
|
|
|
544
|
-
postgreSQL.db_insert_df(conexao, dados, 'teste_table', Schema='meu_esquema', OnConflict='on conflict (coluna_chave_primaria) do nothing')
|
|
544
|
+
postgreSQL.db_insert_df(conexao, dados, 'teste_table', Schema='meu_esquema', OnConflict='on conflict (coluna_chave_primaria) do nothing')
|
|
545
545
|
|
|
546
|
-
# conexão com o banco precisa ser fechada explicitamente após a chamada do método, caso não seja mais utilizada:
|
|
547
|
-
conexao.close()
|
|
548
|
-
```
|
|
546
|
+
# conexão com o banco precisa ser fechada explicitamente após a chamada do método, caso não seja mais utilizada:
|
|
547
|
+
conexao.close()
|
|
548
|
+
```
|
|
549
549
|
|
|
550
550
|
4. O método `postgreSQl.db_select()` executa consultas no banco de dados e retorna um `cursor` com o resultado.
|
|
551
551
|
|
|
552
|
-
A assinatura da função é `postgreSQL.db_select([conexao], [query])`
|
|
552
|
+
A assinatura da função é `postgreSQL.db_select([conexao], [query])`
|
|
553
553
|
|
|
554
|
-
São permitidas apenas instruções de consulta (podendo serem complexas, por exemplo, com uso de [CTE](https://www.postgresql.org/docs/current/queries-with.html)). A presença de outras instruções SQL de manipulação de dados e metadados não são permitidas e abortarão a execução da query, se presentes.
|
|
554
|
+
São permitidas apenas instruções de consulta (podendo serem complexas, por exemplo, com uso de [CTE](https://www.postgresql.org/docs/current/queries-with.html)). A presença de outras instruções SQL de manipulação de dados e metadados não são permitidas e abortarão a execução da query, se presentes.
|
|
555
555
|
|
|
556
|
-
O `cursor` é fechado no contexto do método, antes do retorno, *não podendo* ser manipulado após recebido como retorno da função.
|
|
556
|
+
O `cursor` é fechado no contexto do método, antes do retorno, *não podendo* ser manipulado após recebido como retorno da função.
|
|
557
557
|
|
|
558
|
-
A função retorna *dois objetos*, o primeiro contendo os dados do cursor, o segundo, contendo os nomes das respectivas colunas.
|
|
558
|
+
A função retorna *dois objetos*, o primeiro contendo os dados do cursor, o segundo, contendo os nomes das respectivas colunas.
|
|
559
559
|
|
|
560
|
-
Exemplo de uso:
|
|
560
|
+
Exemplo de uso:
|
|
561
561
|
|
|
562
|
-
```python
|
|
563
|
-
from lbx_toolkit import postgreSQL
|
|
564
|
-
from pathlib import Path
|
|
562
|
+
```python
|
|
563
|
+
from lbx_toolkit import postgreSQL
|
|
564
|
+
from pathlib import Path
|
|
565
565
|
|
|
566
|
-
credenciais = {
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
566
|
+
credenciais = {
|
|
567
|
+
'dbname': 'NOME_BANCO',
|
|
568
|
+
'user': 'USUARIO'',
|
|
569
|
+
'password': 'SENHA',
|
|
570
|
+
'host': 'IP_OU_DNS_SERVIDOR',
|
|
571
|
+
'port': 'PORTA_POSTGRESQL', ## padrão = 5432
|
|
572
|
+
}
|
|
573
573
|
|
|
574
|
-
conexao = postgreSQL.db(credenciais)
|
|
574
|
+
conexao = postgreSQL.db(credenciais)
|
|
575
575
|
|
|
576
|
-
query = 'select * from meu_esquema.teste_table'
|
|
576
|
+
query = 'select * from meu_esquema.teste_table'
|
|
577
577
|
|
|
578
|
-
dados, colunas = postgreSQL.db_select(conexao, query)
|
|
579
|
-
conexao.close()
|
|
580
|
-
```
|
|
578
|
+
dados, colunas = postgreSQL.db_select(conexao, query)
|
|
579
|
+
conexao.close()
|
|
580
|
+
```
|
|
581
581
|
|
|
582
582
|
5. O método `postgreSQl.db_update()` executa updates no banco
|
|
583
583
|
|
|
584
|
-
A assinatura da função é `postgreSQL.db_update([conexao], [query])`
|
|
584
|
+
A assinatura da função é `postgreSQL.db_update([conexao], [query])`
|
|
585
585
|
|
|
586
|
-
São permitidas apenas instruções de update. A presença de outras instruções SQL de manipulação de dados e metadados não são permitidas e abortarão a execução da query.
|
|
586
|
+
São permitidas apenas instruções de update. A presença de outras instruções SQL de manipulação de dados e metadados não são permitidas e abortarão a execução da query.
|
|
587
587
|
|
|
588
|
-
A função retorna *a quantidade de linhas alteradas*.
|
|
588
|
+
A função retorna *a quantidade de linhas alteradas*.
|
|
589
589
|
|
|
590
|
-
Exemplo de uso:
|
|
590
|
+
Exemplo de uso:
|
|
591
591
|
|
|
592
|
-
```python
|
|
593
|
-
from lbx_toolkit import postgreSQL
|
|
594
|
-
from pathlib import Path
|
|
592
|
+
```python
|
|
593
|
+
from lbx_toolkit import postgreSQL
|
|
594
|
+
from pathlib import Path
|
|
595
595
|
|
|
596
|
-
credenciais = {
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
596
|
+
credenciais = {
|
|
597
|
+
'dbname': 'NOME_BANCO',
|
|
598
|
+
'user': 'USUARIO'',
|
|
599
|
+
'password': 'SENHA',
|
|
600
|
+
'host': 'IP_OU_DNS_SERVIDOR',
|
|
601
|
+
'port': 'PORTA_POSTGRESQL', ## padrão = 5432
|
|
602
|
+
}
|
|
603
603
|
|
|
604
|
-
conexao = postgreSQL.db(credenciais)
|
|
604
|
+
conexao = postgreSQL.db(credenciais)
|
|
605
605
|
|
|
606
|
-
query = "update meu_esquema.teste_table set coluna='novo_valor' where pk='chave'"
|
|
606
|
+
query = "update meu_esquema.teste_table set coluna='novo_valor' where pk='chave'"
|
|
607
607
|
|
|
608
|
-
result = postgreSQL.db_update(conexao, query)
|
|
609
|
-
conexao.close()
|
|
608
|
+
result = postgreSQL.db_update(conexao, query)
|
|
609
|
+
conexao.close()
|
|
610
610
|
```
|
|
611
611
|
|
|
612
612
|
<a id="lbxtoolkit.service"></a>
|
|
@@ -655,7 +655,7 @@ O objetos mandatórios a serem inicilizados pelo **ConfigManager** são:
|
|
|
655
655
|
> [!NOTE]
|
|
656
656
|
> Para ser funcional, é necessária que a classe local herde essa classe base e redefina (por sobrecarga) ao menos os métodos `on_run` e `args_parser()`.
|
|
657
657
|
|
|
658
|
-
> [!CAUTION]
|
|
658
|
+
> [!CAUTION]
|
|
659
659
|
> **Não inicialize diretamente a classe!!**
|
|
660
660
|
> Sempre crie uma classe local que herde esta classe
|
|
661
661
|
|
|
@@ -753,7 +753,7 @@ class ServicerConfig(Servicer):
|
|
|
753
753
|
if __name__ == "__main__":
|
|
754
754
|
|
|
755
755
|
Daemon.main()
|
|
756
|
-
|
|
756
|
+
```
|
|
757
757
|
|
|
758
758
|
<a id="lbxtoolkit.service.Servicer.main"></a>
|
|
759
759
|
|
|
@@ -952,10 +952,10 @@ class ServicoWindows(win32serviceutil.ServiceFramework)
|
|
|
952
952
|
|
|
953
953
|
Gerencia a instalação e execução de um daemon como um serviço do windows. Também assume o controle dos argumentos recebidos via linha de comando.
|
|
954
954
|
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
955
|
+
- `SvcInstall`: Cria um serviço do windows com base neste script
|
|
956
|
+
- `SvcRemove`: Remove o serviço do windows configurado à partir de `SvcInstall`
|
|
957
|
+
- `SvcStop`: Para/Interrompe a execução do serviço do windows criado por este script (método herdado da classe pai _win32serviceutil.ServiceFramework_ invocado automaticamente pela chamada do service manager do windows)
|
|
958
|
+
- `SvcDoRun`: Inicializa a execução do serviço do windows criado por este script (método herdado da classe pai _win32serviceutil.ServiceFramework_ invocado autoamticamente pela chamada do service manager do windwos)
|
|
959
959
|
|
|
960
960
|
<a id="lbxtoolkit.service_windows.ServicoWindows.SvcInstall"></a>
|
|
961
961
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
lbxtoolkit/__init__.py,sha256=44ojkLaBn3xC5Ejuiua_4CHP4JAN3rybRjElJAm3EwA,5850
|
|
2
2
|
lbxtoolkit/api_rest.py,sha256=vuehp8CevkiDThjV7ofYmnPUgsBOrw3B_L-jnn5Kxx0,11228
|
|
3
3
|
lbxtoolkit/auth_entra_id.py,sha256=2iE7KpRhdh4u7Y4lem63IUkEPl_GpSLRSw45_Byn1s0,21922
|
|
4
|
-
lbxtoolkit/config_manager.py,sha256=
|
|
4
|
+
lbxtoolkit/config_manager.py,sha256=n3pVsxKykiYsgRuJNcNrq-bdEAjDHLmeCySl33DsoNE,1629
|
|
5
5
|
lbxtoolkit/lbx_logger.py,sha256=45raalyTX45OwVOk3I7W8B4tDnIaU2j2cYsprn7SREk,22854
|
|
6
6
|
lbxtoolkit/misc.py,sha256=CYPlrOQTuyql-LPDqG2NXCHq5-JhxttmBRLZMSVdHhA,3113
|
|
7
7
|
lbxtoolkit/postgresql.py,sha256=UzjeA675cDG0_reVLUf_2UJm1X_r7wRfAsxAmaYRzhk,10898
|
|
8
|
-
lbxtoolkit/service.py,sha256=
|
|
9
|
-
lbxtoolkit/service_windows.py,sha256=
|
|
10
|
-
lbxtoolkit-2.2.
|
|
11
|
-
lbxtoolkit-2.2.
|
|
12
|
-
lbxtoolkit-2.2.
|
|
8
|
+
lbxtoolkit/service.py,sha256=Jjqq-ovB5YBue4bRRYCix9v4QDwyWoABH0AYO03yvfY,18938
|
|
9
|
+
lbxtoolkit/service_windows.py,sha256=LTqITqOEWVSvp5slHG7NpRZV0-NYqI9tAgMXRvkSibM,15226
|
|
10
|
+
lbxtoolkit-2.2.3.dist-info/METADATA,sha256=969no0mtfbj_NaLFhbHfBfsolRrz-GKA-gjxwVYcM5s,46566
|
|
11
|
+
lbxtoolkit-2.2.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
12
|
+
lbxtoolkit-2.2.3.dist-info/RECORD,,
|
|
File without changes
|