lbxtoolkit 2.2.1__tar.gz → 2.2.2__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lbxtoolkit
3
- Version: 2.2.1
3
+ Version: 2.2.2
4
4
  Summary:
5
5
  Author: Cristiano P. Ferrari
6
6
  Author-email: cristiano.ferrari@lbx.com.br
@@ -29,7 +29,9 @@ __**Caixa de ferramentas de automações de processo (RPA)**__
29
29
 
30
30
  Biblioteca com ferramentas utilitárias e de uso recorrente em aplicações de RPA para automações de processos.
31
31
 
32
- Todas as classes e métodos deste módulo possuem **docstrings**. Portanto, para ter acesso às informações de uso, use `nome_classe.__doc__`. Exemplo:
32
+ Todas as classes e métodos deste módulo possuem **docstrings**.
33
+ Portanto, para ter acesso às informações de uso, use `nome_classe.__doc__`.
34
+ Exemplo:
33
35
 
34
36
  ```python
35
37
  from lbxtoolkit import Servicer
@@ -41,66 +43,66 @@ print(help)
41
43
 
42
44
  **auth_EntraID**
43
45
  Usa o Microsoft Entra ID (antiga Azure AD) para evitar execução não autorizada de scripts
44
- > - `disclaimer` : Mensagem sobre a necessidade de autenticação
45
- > - `valida_grupo` : Autentica o usuário e aborta se checa não pertencer ao grupo de segurança
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
46
48
 
47
49
 
48
50
  **postgreSQL**
49
51
  Interage com o banco de dados PostgreSQL
50
- > - `db` Inicia sessão com o banco
51
- > - `csv_df` Lê arquivo CSV e gera Dataframe (pandas) a partir dele
52
- > - `db_insert_df` Insere informações de Dataframe em tabela do banco com estrutura equivalente
53
- > - `db_select` Retorna um cursor a partir de uma query
54
- > - `db_update` Executa update em tabelas
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
55
57
 
56
58
 
57
59
  **api_rest**
58
60
  Interage com APIs RESTfull, especialmente providas para a plataforma Sienge
59
- > - `auth_base` Autentica (HTTPBasicAuth) sessão na API
60
- > - `auth_bearer` Autentica sessão na API pelos métodos: OAuth, JWT, Bearer
61
- > - `endpoint_json` Realizad chama ao endpoint. Payload em formato `json` opcional.
62
- > - `trata_erro_sienge` Retorna a mensagem de erro do Sienge caso código de retorno seja diferente de 200.
63
- > - `close` Encerra a sessão autenticada
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
64
66
 
65
67
  **lbx_logger**
66
68
  Manipula e formata as mensagens de saída do script para direcioná-las para tela (stdout) e/ou arquivo de log
67
- > - `add` Adiciona a mensagem a um _buffer_ sem exibir, acumulando até a próxima chamada em algum dos níveis abaixo.
68
- > - `print` Contorna o manipulador de log e imprime diretamente na tela (stdout), sem formatar a mensagem nem registrar no arquivo
69
- > - `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
70
- > - `stop_logging` Interrompe a manipulação das saídas pelo logger e restaura as saídas padrão (stdout/stderr) para a tela
71
- > - `filtra` Filtra os eventos do arquivo de log registrados em um intervalo de tempo específico
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
72
74
 
73
75
  **SafeLogger**
74
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
75
77
 
76
78
  **ConfigManager**
77
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.
78
- > - `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.
79
- > - `get` O método get aceita uma chave como argumento e retorna o valor correspondente do dicionário _config.
80
- > - `set` O método set permite adicionar ou atualizar dinamicamente valores no dicionário _config.
81
- > - `reset` O método reset limpa todas as configurações armazenadas, permitindo uma nova inicialização do ConfigManager com novos valores
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
82
84
 
83
85
  **ServicoWindows**
84
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.
85
- > - `SvcInstall` Cria um serviço do windows com base neste script
86
- > - `SvcRemove` Remove o serviço do windows configurado à partir de `SvcInstall`
87
- > - `SvcStop` Para/Interrompe a execução do serviço do windows criado por este script (método herdado da classe pai _win32serviceutil.ServiceFramework_)
88
- > - `SvcDoRun` Inicializa a execução do serviço do windows criado por este script (método herdado da classe pai _win32serviceutil.ServiceFramework_)
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_)
89
91
 
90
92
  **Servicer**
91
93
  Classe base com a esrtutura padrão para a criação dameons/serviços do windows.
92
- > - `run`, `stop` Usados para iniciar (`run`) e parar (`stop`) a execução do daemon/serviço.
93
- > - `main` deve ser chamada para controlar a sua chamada inicial do script, tratando os argumentos da linha de comando
94
- > - `on_run` é o método que efetivamente executa o propósito do script quando o método pai `run` é executado
95
- > - `args_parser` é o método que define o comportamento do script quando o método `main` é executado (**`argpaser`**)
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`**)
96
98
 
97
99
  **misc**
98
100
  Classe de miscelâneas/diversos
99
- > - `seleciona_arquivo` Abre um picker do sistema operacionar para selecionar um *arquivo* e retorna seu path
100
- > - `seleciona_dir` Abre um picker do sistema operacionar para selecionar um *diretório* e retorna seu path
101
- > - `normaliza` Limpa caracteres especiais e espaços de strings e retorna tudo em minúsculo
102
- > - `get_cmd_window` Captura a referencia da janela atual (cmd.exe) para retornar o foco à ela depois de chamar os pickers
103
- > - `maximize_console` Maxima a janela do console (cmd.exe)
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)
104
106
 
105
107
  ## Instalação e uso:
106
108
 
@@ -137,13 +139,13 @@ api_rest(url, credenciais, cadencia, timeout=6, logger=None, headers={"Content-T
137
139
  ```
138
140
 
139
141
  São nessários 2 parâmetros posicionais obrigatórios, e 5 parametros nominais facultativos (valor padrão, se omisso, indicado na sintaxe acima):
140
- > - `url`: o endereço da URL de autenticação da API
141
- > - `crednciais`: Dicionário com credenciais de autenticação.
142
- > - `cadencia` Número máximo de chamadas *por segudo* à API
143
- > - `timeout` Tempo máximo (segundos) para aguardar retorno à chamada. Padrão 6s, se omisso.
144
- > - `logger` O objeto _log handler_ para lidar com as informações de saída. Se não informado, todas as saídas serão direcionadas para a stdout.
145
- > - `headers` Cabeçalhos _http_ para a requisição à API.
146
- > - `verify` Verifica a validade do certificado SSL do servidor de destino da requisição.
142
+ - `url`: o endereço da URL de autenticação da API
143
+ - `crednciais`: Dicionário com credenciais de autenticação.
144
+ - `cadencia` Número máximo de chamadas *por segudo* à API
145
+ - `timeout` Tempo máximo (segundos) para aguardar retorno à chamada. Padrão 6s, se omisso.
146
+ - `logger` O objeto _log handler_ para lidar com as informações de saída. Se não informado, todas as saídas serão direcionadas para a stdout.
147
+ - `headers` Cabeçalhos _http_ para a requisição à API.
148
+ - `verify` Verifica a validade do certificado SSL do servidor de destino da requisição.
147
149
 
148
150
  Quanto às credenciais de autenticação, assim como a classe de interação com o PostgreSQL, elas precisam ser fornecidas na forma de um *dicionário*.
149
151
  Para o método `api_rest.aut_basic()`, o formato deve ser:
@@ -157,10 +159,10 @@ Caso a autenticação seja pelo método `api_rest.aut_bearer()`, o dicionário d
157
159
 
158
160
 
159
161
  A classe possui 3 métodos:
160
- > - `api_rest.auth_basic()`: instanciamento da sessão autenticando pelo método HTTPBasicAuth
161
- > - `api_rest.auth_bearer()`: instanciamento da sessão autenticando pelos métodos OAuth, JWT, Bearer
162
- > - `api_rest.endpoint_json([endereço], [método], payload=None)`: para a chamada ao endpoint
163
- > - `close()` para encerra a instância/sessão
162
+ - `api_rest.auth_basic()`: instanciamento da sessão autenticando pelo método HTTPBasicAuth
163
+ - `api_rest.auth_bearer()`: instanciamento da sessão autenticando pelos métodos OAuth, JWT, Bearer
164
+ - `api_rest.endpoint_json([endereço], [método], payload=None)`: para a chamada ao endpoint
165
+ - `close()` para encerra a instância/sessão
164
166
 
165
167
  O consumo é feito pelo método `api_rest.endpoint_json` que suporta apenas APIs cujo payload (opcional) seja aceito no formato JSON.
166
168
 
@@ -192,7 +194,7 @@ Payload = {
192
194
  }
193
195
  EndPoint = f'{UrlBase}/bills/{Nutitulo}/installments/{Nuparcela}'
194
196
 
195
- #chama o endpoint e recebe o retorno no objeto AlteraVcto
197
+ `chama` o endpoint e recebe o retorno no objeto AlteraVcto
196
198
  AlteraVcto = ApiSienge.endpoint_json(EndPoint, 'patch', Payload)
197
199
  ```
198
200
 
@@ -216,12 +218,12 @@ class auth_EntraID()
216
218
 
217
219
  #### Classe **auth_EntraID**
218
220
 
219
- Este recurso tem o propósito de controlar as permissões de execução do script usando as credencias do ambiente AD em nuvem da Microsoft (Azure AD >> Microsoft Entra ID), abortando se a autentição falhar ou o usuário não pertencer ao grupo.
221
+ Este recurso tem o propósito de controlar as permissões de execução do script usando as credencias do ambiente AD em nuvem da Microsoft (Azure AD Microsoft Entra ID), abortando se a autentição falhar ou o usuário não pertencer ao grupo.
220
222
 
221
223
  Essa classe possui apenas dois métodos:
222
224
 
223
- > - `auth_EntraID.disclaimer()`: apenas exibe uma tela de informações/instruções ao usuário.
224
- > - `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.
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.
225
227
 
226
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).
227
229
  Sugerimos não armazenar estas ou outras informações sensíveis no script. Considere usar o pacote `dotenv` para isso.
@@ -230,7 +232,7 @@ Os argumentos obrigatórios (posicionais) são:
230
232
 
231
233
  1. `tenant_id` corresponde ao campo *ID do Locatário*, que pode ser obtido na página [visão geral de identidade do domínio](https://entra.microsoft.com/`blade`/Microsoft_AAD_IAM/TenantOverview.ReactView)
232
234
 
233
- 2. `client_id` corresponde ao *ID do aplicativo (cliente)*, obtido na secção [_Identidade > Aplicativos > Registros de Aplicativo_](https://entra.microsoft.com/`view`/Microsoft_AAD_RegisteredApps/ApplicationsListBlade/quickStartType~/null/sourceType/Microsoft_AAD_IAM). Considere não reaproveitar aplicativos e criar um específico para essa finalidade.
235
+ 2. `client_id` corresponde ao *ID do aplicativo (cliente)*, obtido na secção [_Identidade Aplicativos Registros de Aplicativo_](https://entra.microsoft.com/`view`/Microsoft_AAD_RegisteredApps/ApplicationsListBlade/quickStartType~/null/sourceType/Microsoft_AAD_IAM). Considere não reaproveitar aplicativos e criar um específico para essa finalidade.
234
236
 
235
237
  3. `secret_id` corresponde ao *Valor* do _ID secreto_ (não ao próprio ID Secreto) do aplicativo. Este token não é passivel de consulta após gerado e para obtê-lo, é necessário criar um novo segredo para o aplicativo na subsecção _"Certificados e Segredos"_, após clicar no nome do aplicativo exibo na indicada no item (2). O token (_Valor do segredo_) deve ser copiado e anotado no ato da criação, pois *não é possível consultá-lo posteriormente*.
236
238
 
@@ -250,7 +252,7 @@ auth.disclaimer()
250
252
 
251
253
  auth.valida_grupo('Nome do Grupo de Distribuição')
252
254
  # se usuário não pertencer a grupo informado, a execução do script é abortada.
253
- ```
255
+ ```
254
256
 
255
257
  <a id="lbxtoolkit.config_manager"></a>
256
258
 
@@ -266,12 +268,12 @@ class ConfigManager()
266
268
 
267
269
  #### Classe **auth_EntraID**
268
270
 
269
- É um singleton que garante que todas as partes do código usem a mesma instância e, portanto, compartilhem a mesma configuração.
271
+ É um singleton que garante que todas as partes do código usem a mesma instância e, portanto, compartilhem a mesma configuração.
270
272
 
271
- > - `initialize(chave1=valor1, ..., chaveN=valorN)` : O método initialize usa **kwargs para aceitar qualquer número de pares chave-valor, armazenando-os no dicionário _config da instância.
272
- > - `get('chave')`: O método get aceita uma chave como argumento e retorna o valor correspondente do dicionário _config.
273
- > - `set('chave', valor)`: O método set permite adicionar ou atualizar dinamicamente valores no dicionário _config.
274
- > - `reset`: O método reset limpa todas as configurações armazenadas, permitindo uma nova inicialização do ConfigManager com novos valores
273
+ - `initialize(chave1=valor1, ..., chaveN=valorN)` : O método initialize usa **kwargs para aceitar qualquer número de pares chave-valor, armazenando-os no dicionário _config da instância.
274
+ - `get('chave')`: O método get aceita uma chave como argumento e retorna o valor correspondente do dicionário _config.
275
+ - `set('chave', valor)`: O método set permite adicionar ou atualizar dinamicamente valores no dicionário _config.
276
+ - `reset`: O método reset limpa todas as configurações armazenadas, permitindo uma nova inicialização do ConfigManager com novos valores
275
277
 
276
278
  <a id="lbxtoolkit.lbx_logger"></a>
277
279
 
@@ -305,20 +307,17 @@ Todos os parametros são nominativos e facultativos. Em caso de omissão, os val
305
307
 
306
308
  Os parametros para o instanciamento da classe são:
307
309
 
308
- > - `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.
309
- > - `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_).
310
- >> 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:
311
- > - `logging.DEBUG`: para manipular chamadas do método *.debug()* e acima.
312
- > - `logging.INFO`: para manipular chamadas do método *.info()* e acima.
313
- > - `logging.WARNING`: para manipular chamadas do método *.aviso()* e acima.
314
- > - `logging.ERROR`: para manipular chamadas do método *.erro()* e acima.
315
- > - `logging.CRITICAL`: para manipular chamadas do método *.critico()* e acima.
316
- > - `formato_log`: Define o formato em que a mensagem será apresentada. Se omisso, o padrá é *DATA_HORA - NIVEL - MENSAGEM*.
317
- >> 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.
319
- >> 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.
320
- > - `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.
321
- > - `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*.
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*.
322
321
 
323
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:
324
323
 
@@ -340,9 +339,9 @@ log.info('Mensagem 3) ## será exibida/registrada como nível "info" e com texto
340
339
 
341
340
  3. Os métodos que exibem as mensagens (`.debug()`,`.info()`,`.aviso()`, `.erro()`, `.critico()`) possuem 3 parametros: `message`, `corte=None`, `exit=None`.
342
341
 
343
- > - `message`: posicional e obrigatório. corresponde à mensagem a ser exibida
344
- > - `corte`: o tamanho máximo da mensagem a ser exibida. opcional e se omitido, exibe a mensagem inteira. se fornecido, corta a mensagem no comprimento informado
345
- > - `exit`: opcional. se informado (requer um código de retorno), aborta o script com o código informado. se omisso (padrão) a mensagem apenas é minutada pelo log, sem interferir no funcionamento do script
342
+ - `message`: posicional e obrigatório. corresponde à mensagem a ser exibida
343
+ - `corte`: o tamanho máximo da mensagem a ser exibida. opcional e se omitido, exibe a mensagem inteira. se fornecido, corta a mensagem no comprimento informado
344
+ - `exit`: opcional. se informado (requer um código de retorno), aborta o script com o código informado. se omisso (padrão) a mensagem apenas é minutada pelo log, sem interferir no funcionamento do script
346
345
 
347
346
  4. O método `.filtra()` possui 3 parametros posicionais, todos opcionais: `log_file`, `dh_ini`, `dh_fim`.
348
347
 
@@ -356,6 +355,7 @@ Considerando que os parametros são posicionais, caso queira omitir apenas um do
356
355
 
357
356
  A saída dessa função retorna um objeto, que pode ser salvo em disco ou impresso na tela.
358
357
 
358
+
359
359
  5. Exemplos de uso:
360
360
 
361
361
  ```python
@@ -403,11 +403,11 @@ log.info('Essa mensagem não será exibida pois o script foi abortado na mensage
403
403
  filtra_log = log.search()
404
404
 
405
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
406
+ ultimas_6h = datetime.datetime.now() - datetime.timedelta(hours=6) ## carimbo de tempo de 6 horas atrás !!! requer import datetime
407
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
408
 
409
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
410
+ ultimas_3h = datetime.datetime.now() - datetime.timedelta(hours=3) ## carimbo de tempo de 6 horas atrás !!! requer import datetime
411
411
  filtra_log = log.search(None, '14/01/2020 00:00', ultimas_3h) #
412
412
 
413
413
  # obtem os registros do horário comercial do dia 23/12/2023 do arquivo salvo em C:\temp\outro_arquivo.log
@@ -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
- > - `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()`
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
 
@@ -498,7 +498,7 @@ O nome do schema é ser declarado no contexto da query, mas se desejar alterar o
498
498
 
499
499
  Qualquer argumento de conexão previsto no pacote *psycopg2* são aceitos como entrada no dicionário acima.
500
500
 
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.
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
503
  ```python
504
504
  from pathlib import Path
@@ -589,7 +589,7 @@ A função retorna *a quantidade de linhas alteradas*.
589
589
 
590
590
  Exemplo de uso:
591
591
 
592
- ```´python
592
+ ```python
593
593
  from lbx_toolkit import postgreSQL
594
594
  from pathlib import Path
595
595
 
@@ -607,7 +607,7 @@ query = "update meu_esquema.teste_table set coluna='novo_valor' where pk='chave'
607
607
 
608
608
  result = postgreSQL.db_update(conexao, query)
609
609
  conexao.close()
610
- ```
610
+ ```
611
611
 
612
612
  <a id="lbxtoolkit.service"></a>
613
613
 
@@ -636,24 +636,24 @@ O método `__ini__` da classe local deve provocar o instanciamento da classe pai
636
636
  Após o __init__(), defina no contexto da classe local os métodos a serem sobrecarregados em Servicer(), em seguida os métodos funcionais (o que de fato o app faz) e instancie a classe local.
637
637
 
638
638
  Os métodos possíveis de sobrecarga em Servicer() são:
639
- > `on_stop`, `on_run`, `on_cleanup`, `args_parser`
640
- > Cada um destes métodos possuim dois metodos complementares associados, pósfixados com "pre" e "pos" (ex: `on_start_pre`, `on_start_pos`).
641
- > Estes métodos complementares permitem a injeção de código antes (pre) e depois (pós) da execução do método principal, para melhor flexibilidade e controle do fluxo do daemon
639
+ `on_stop`, `on_run`, `on_cleanup`, `args_parser`
640
+ Cada um destes métodos possuim dois metodos complementares associados, pósfixados com "pre" e "pos" (ex: `on_start_pre`, `on_start_pos`).
641
+ Estes métodos complementares permitem a injeção de código antes (pre) e depois (pós) da execução do método principal, para melhor flexibilidade e controle do fluxo do daemon
642
642
 
643
643
 
644
644
  A classe base possui ainda algumas dependÊncias que precisam ser inicializadas fora do contexto da classe configuradora/local.
645
645
  Para isso, use classe ConfigManager.initialize(), disponível também no módulo `lbxtoolkit`.
646
646
  O objetos mandatórios a serem inicilizados pelo **ConfigManager** são:
647
- > **log** = Objeto instanciado da classe lbx_logger, para manipular as entradas de log
648
- > **daemon** = Objeto resultante do instanciamento da própria própria classe configuradora (deve ser inicializado após o instanciamento do objeto daemon, usando `ConfigManager.set()`)
649
- > **config** = Dicionário contento os parametros (name, display_name e description) para instalar o serviço do windows
650
- > **servicepath** = Objeto do Path com o caminho deste script
651
- > **argparse_cfg** = Dicionário contendo os parametros de configuração (descrition, usage, add_help e formatter_classe) do módulo argparse (manipulado dos parametros de linha de comando)
652
- > **argparse_opt** = Lista de dicionários com a configuração do argumentos de entrada aceitos (short, long, action, help)
653
- > **ambiente** = Definie o ambiente de excução: Linux, Windows [console] ou Serviço [Windows]
647
+ - **log** = Objeto instanciado da classe lbx_logger, para manipular as entradas de log
648
+ - **daemon** = Objeto resultante do instanciamento da própria própria classe configuradora (deve ser inicializado após o instanciamento do objeto daemon, usando `ConfigManager.set()`)
649
+ - **config** = Dicionário contento os parametros (name, display_name e description) para instalar o serviço do windows
650
+ - **servicepath** = Objeto do Path com o caminho deste script
651
+ - **argparse_cfg** = Dicionário contendo os parametros de configuração (descrition, usage, add_help e formatter_classe) do módulo argparse (manipulado dos parametros de linha de comando)
652
+ - **argparse_opt** = Lista de dicionários com a configuração do argumentos de entrada aceitos (short, long, action, help)
653
+ - **ambiente** = Definie o ambiente de excução: Linux, Windows [console] ou Serviço [Windows]
654
654
 
655
- >[!NOTE]
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()`.
655
+ > [!NOTE]
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
658
  > [!CAUTION]
659
659
  > **Não inicialize diretamente a classe!!**
@@ -661,98 +661,98 @@ O objetos mandatórios a serem inicilizados pelo **ConfigManager** são:
661
661
 
662
662
  Exemplo de uso:
663
663
 
664
- ```python
665
- import os
666
- import platform
667
- from pathlib import Path
668
- from lbxtoolkit import Servicer, ServicoWindows, lbx_logger
669
-
670
- class ServicerConfig(Servicer):
671
- def __init__(self, Log=None, piddir=None): ## Log e piddir são parametros mandatórios. outros parametros posicionais ou nominais (*args e **kwargs) pode ser adicionados aqui para serem utilizados pelos métodos locais
672
- super().__init__(Log=Log, piddir=piddir) ## provoca a inicialização da classe pai
673
- ## complete o código de instanciamento da classe aqui, se necessário
674
- ## os métodos on_init(), on_init_pre() e on_init_pos()
675
- ## SOBRECARGA DOS MÉTODOS DA CLASSE PAI
676
- def on_run(self): ## mandatório. dependência de Servicer(). necessário para redefinir por sobrecarga o método que inicia o daemon.
677
- self.FAZ_O_QUE_PRECISA_SER_FEITO_QUANDO_DAEMON()
678
- # se o método on_run_pre() e on_run_pos() forem definidos, ele serão executados respectivamente antes e depois deste método, quando o método run() for chamado
679
- return super().on_run()
680
- def on_stop(self): ## opcional. é dependência de Servicer() mas pode ser omisso se a interrupção do script não exigir nada a do que o Servicer() ja faz no método SvcStop()
681
- # não há necessidade de redefinir por sobrecarga o método on_stop. o comportamento padrão da classe base é suficiente. na maioria dos casos
682
- # mas fique livre para definir algo aqui.
683
- # se o método on_stop_pre() e on_stop_pos() forem definidos, ele serão executados respectivamente antes e depois deste método, quando o método stop() for chamado
684
- pass
685
- #
686
- #
687
- def args_paser(self): ## mandatório. dependência de Servicer(). necessário para tratar as opções/argumentos recebidos da linha de comando
688
- # defina argumentos de argpaser definidos no dicionário args_opt, definido fora da classe e inicializado por ConfigManager.
689
- if self.args.file: ## processa arquivo interativamente quando recebido paramtros '-f' ou '--file'
690
- Arquivo = Path(self.args.file)
691
- self.METODO_INTERATIVO(Arquivo)
692
- if self.args.daemon: ## inicia execução como daemon quando recebido parametro '-d' ou '--daemon'
693
- ServicoWindows.RunAsDaemon()
694
- else:
695
- self.parser.print_help()
696
- self.log.stop_logging()
697
- return super().args_paser()
698
- ## DEFINIÇÃO DOS MÉTODOS LOCAIS
699
- def FAZ_O_QUE_PRECISA_SER_FEITO_QUANDO_DAEMON(self):
700
- # seu código aqui
701
- pass
702
- def METODO_INTERATIVO((self, file=None)
703
- # seu código aqui
704
- pass
705
- # (quantos métodos locais mais forem necessários à execução do script)
706
-
707
- Config = { # Parametro obrigatório para a classe ServicoWindows. Deve ficar entre BaseDir e LogDaemon
708
- 'name' : "NomeServicoWindows",
709
- 'display_name' : "Nome de exebição do serviço do windows",
710
- 'description' : "Descrição da função do serviço windows"
711
- }
712
- Ambiente = 'Linux' if platform.system() == 'Linux' else 'Serviço' if not os.getenv('VIRTUAL_ENV') else 'Windows'
713
- PythonPath = Path(os.path.join(os.getenv('VIRTUAL_ENV'), 'Scripts', 'python.exe')) if os.getenv('VIRTUAL_ENV') else Path('.', '.venv' , 'Scripts', 'python.exe')
714
- ServicePath = Path(os.path.abspath(__file__))
715
- ArgparseCfg = {
716
- 'description' : f'Descreva o que o script faz',
717
- 'usage' : '%(prog)s [opções] [comando]',
718
- 'add_help' : False,
719
- 'formatter_class' : argparse.RawTextHelpFormatter
664
+ ```python
665
+ import os
666
+ import platform
667
+ from pathlib import Path
668
+ from lbxtoolkit import Servicer, ServicoWindows, lbx_logger
669
+
670
+ class ServicerConfig(Servicer):
671
+ def __init__(self, Log=None, piddir=None): ## Log e piddir são parametros mandatórios. outros parametros posicionais ou nominais (*args e **kwargs) pode ser adicionados aqui para serem utilizados pelos métodos locais
672
+ super().__init__(Log=Log, piddir=piddir) ## provoca a inicialização da classe pai
673
+ ## complete o código de instanciamento da classe aqui, se necessário
674
+ ## os métodos on_init(), on_init_pre() e on_init_pos()
675
+ ## SOBRECARGA DOS MÉTODOS DA CLASSE PAI
676
+ def on_run(self): ## mandatório. dependência de Servicer(). necessário para redefinir por sobrecarga o método que inicia o daemon.
677
+ self.FAZ_O_QUE_PRECISA_SER_FEITO_QUANDO_DAEMON()
678
+ # se o método on_run_pre() e on_run_pos() forem definidos, ele serão executados respectivamente antes e depois deste método, quando o método run() for chamado
679
+ return super().on_run()
680
+ def on_stop(self): ## opcional. é dependência de Servicer() mas pode ser omisso se a interrupção do script não exigir nada a do que o Servicer() ja faz no método SvcStop()
681
+ # não há necessidade de redefinir por sobrecarga o método on_stop. o comportamento padrão da classe base é suficiente. na maioria dos casos
682
+ # mas fique livre para definir algo aqui.
683
+ # se o método on_stop_pre() e on_stop_pos() forem definidos, ele serão executados respectivamente antes e depois deste método, quando o método stop() for chamado
684
+ pass
685
+ #
686
+ #
687
+ def args_paser(self): ## mandatório. dependência de Servicer(). necessário para tratar as opções/argumentos recebidos da linha de comando
688
+ # defina argumentos de argpaser definidos no dicionário args_opt, definido fora da classe e inicializado por ConfigManager.
689
+ if self.args.file: ## processa arquivo interativamente quando recebido paramtros '-f' ou '--file'
690
+ Arquivo = Path(self.args.file)
691
+ self.METODO_INTERATIVO(Arquivo)
692
+ if self.args.daemon: ## inicia execução como daemon quando recebido parametro '-d' ou '--daemon'
693
+ ServicoWindows.RunAsDaemon()
694
+ else:
695
+ self.parser.print_help()
696
+ self.log.stop_logging()
697
+ return super().args_paser()
698
+ ## DEFINIÇÃO DOS MÉTODOS LOCAIS
699
+ def FAZ_O_QUE_PRECISA_SER_FEITO_QUANDO_DAEMON(self):
700
+ # seu código aqui
701
+ pass
702
+ def METODO_INTERATIVO((self, file=None)
703
+ # seu código aqui
704
+ pass
705
+ # (quantos métodos locais mais forem necessários à execução do script)
706
+
707
+ Config = { # Parametro obrigatório para a classe ServicoWindows. Deve ficar entre BaseDir e LogDaemon
708
+ 'name' : "NomeServicoWindows",
709
+ 'display_name' : "Nome de exebição do serviço do windows",
710
+ 'description' : "Descrição da função do serviço windows"
711
+ }
712
+ Ambiente = 'Linux' if platform.system() == 'Linux' else 'Serviço' if not os.getenv('VIRTUAL_ENV') else 'Windows'
713
+ PythonPath = Path(os.path.join(os.getenv('VIRTUAL_ENV'), 'Scripts', 'python.exe')) if os.getenv('VIRTUAL_ENV') else Path('.', '.venv' , 'Scripts', 'python.exe')
714
+ ServicePath = Path(os.path.abspath(__file__))
715
+ ArgparseCfg = {
716
+ 'description' : f'Descreva o que o script faz',
717
+ 'usage' : '%(prog)s [opções] [comando]',
718
+ 'add_help' : False,
719
+ 'formatter_class' : argparse.RawTextHelpFormatter
720
+ }
721
+ ArgparseOpt = [
722
+ {
723
+ 'short' : '-d',
724
+ 'long' : '--daemon',
725
+ 'action' : 'store_true',
726
+ 'help' : 'Executa como daemon exbindo as saídas no console (linux/windows)'
727
+ },
728
+ {
729
+ 'short' : '-f',
730
+ 'long' : '--file',
731
+ 'action' : 'store',
732
+ 'help' : 'Processa o arquivo indicado, mostrando os resultados no console e terminal (linux/windows)'
733
+ },
734
+ {
735
+ 'short' : '-h',
736
+ 'long' : '--help',
737
+ 'action' : 'help',
738
+ 'help' : 'Exibe esta mensagem de ajuda'
720
739
  }
721
- ArgparseOpt = [
722
- {
723
- 'short' : '-d',
724
- 'long' : '--daemon',
725
- 'action' : 'store_true',
726
- 'help' : 'Executa como daemon exbindo as saídas no console (linux/windows)'
727
- },
728
- {
729
- 'short' : '-f',
730
- 'long' : '--file',
731
- 'action' : 'store',
732
- 'help' : 'Processa o arquivo indicado, mostrando os resultados no console e terminal (linux/windows)'
733
- },
734
- {
735
- 'short' : '-h',
736
- 'long' : '--help',
737
- 'action' : 'help',
738
- 'help' : 'Exibe esta mensagem de ajuda'
739
- }
740
- ]
741
- LogHandler = lbx_logger(LogFile, logging.DEBUG, ignore_console=[logging.DEBUG]) ## ajuste LogFile para None para desativar log e exibir tudo no console e incluia na lista ignore_console=[] os níveis de log que deseja não exibir no console
742
- ConfigManager.initialize(
743
- log=LogHandler,
744
- config=Config,
745
- ServicePath=ServicePath,
746
- argparse_cfg=ArgparseCfg,
747
- argparse_opt=ArgparseOpt,
748
- ambiente=Ambiente
749
- )
750
- Daemon = ServicerConfig(DirRetorno, Log=LogDaemon, piddir=DirPIDDaemons)
751
- ConfigManager.set('daemon',Daemon)
752
-
753
- if __name__ == "__main__":
754
-
755
- Daemon.main()
740
+ ]
741
+ LogHandler = lbx_logger(LogFile, logging.DEBUG, ignore_console=[logging.DEBUG]) ## ajuste LogFile para None para desativar log e exibir tudo no console e incluia na lista ignore_console=[] os níveis de log que deseja não exibir no console
742
+ ConfigManager.initialize(
743
+ log=LogHandler,
744
+ config=Config,
745
+ ServicePath=ServicePath,
746
+ argparse_cfg=ArgparseCfg,
747
+ argparse_opt=ArgparseOpt,
748
+ ambiente=Ambiente
749
+ )
750
+ Daemon = ServicerConfig(DirRetorno, Log=LogDaemon, piddir=DirPIDDaemons)
751
+ ConfigManager.set('daemon',Daemon)
752
+
753
+ if __name__ == "__main__":
754
+
755
+ Daemon.main()
756
756
  ````
757
757
 
758
758
  <a id="lbxtoolkit.service.Servicer.main"></a>
@@ -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
- > - `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)
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