lbxtoolkit 2.2.2__py3-none-any.whl → 2.2.4__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/__init__.py CHANGED
@@ -77,6 +77,7 @@ Classe de miscelâneas/diversos
77
77
  - `normaliza` Limpa caracteres especiais e espaços de strings e retorna tudo em minúsculo
78
78
  - `get_cmd_window` Captura a referencia da janela atual (cmd.exe) para retornar o foco à ela depois de chamar os pickers
79
79
  - `maximize_console` Maxima a janela do console (cmd.exe)
80
+ - `cor` Altera cores de fonte e funto e estilos (negrito/sublinhado)
80
81
 
81
82
  ## Instalação e uso:
82
83
 
@@ -1,6 +1,6 @@
1
1
  class ConfigManager: # Inicializa e recupera variáveis em ambiente de intercâmbio entre classes
2
2
  """
3
- #### Classe **auth_EntraID**
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/misc.py CHANGED
@@ -20,6 +20,7 @@ Sintaxe e exemplos de uso. Parametros omissos assume-se os valores padrão indic
20
20
  - `NomeLimpo = normaliza('String # SEM Noção!') # string_sem_nocao`
21
21
  - `cmd_window = get_cmd_window()`
22
22
  - `maximize_console()`
23
+ - `print(cor('Texto branco ', 'BC') + cor('Texto preto ', 'PT'))`
23
24
  """
24
25
  def __init__(self):
25
26
  pass
@@ -73,3 +74,56 @@ Sintaxe e exemplos de uso. Parametros omissos assume-se os valores padrão indic
73
74
  user32.ShowWindow(hWnd, 3) # 3 = SW_MAXIMIZE
74
75
  #
75
76
  #
77
+ @classmethod
78
+ def cor(cls, text, color=None, style=None):
79
+ """
80
+ Aplica cor e estilo ao texto fornecido.
81
+
82
+ Exemplo de uso:
83
+
84
+ from lbxtoolkit import misc
85
+
86
+ os.system('') ## necessário para ativar o suporte a caracteres ANSI
87
+
88
+ print(cor('Texto branco ', 'BC') + cor('Texto preto ', 'PT'))
89
+ print(cor('Texto Azul Fundo Amarelo', 'AZ', 'bAM')
90
+ print(cor('Texto branco negrito', 'BC', 'NG'))
91
+ print(cor('Texto cinza claro', 'CL'))
92
+ print(cor('Texto cinza escuro', 'CE'))
93
+ print(cor('FUNDO cinza claro', style='bCL'))
94
+ print(cor('FUNDO cinza escuro', style='bCE'))
95
+ """
96
+ COLORS = {
97
+ 'PT': '\033[30m', # Preto
98
+ 'CE': '\033[90m', # Cinza (Cinza Escuro)
99
+ 'CL': '\033[37m', # Cinza Claro
100
+ 'VM': '\033[91m', # Vermelho
101
+ 'VD': '\033[92m', # Verde
102
+ 'AM': '\033[93m', # Amarelo
103
+ 'AZ': '\033[94m', # Azul
104
+ 'MG': '\033[95m', # Magenta
105
+ 'CY': '\033[96m', # Ciano
106
+ 'BC': '\033[97m', # Branco
107
+ 'RS': '\033[0m' # Reset
108
+ }
109
+
110
+ STYLES = {
111
+ 'NG': '\033[1m', # Negrito
112
+ 'SB': '\033[4m', # Sublinhado
113
+ 'RS': '\033[0m', # Reset
114
+ # Cores de fundo
115
+ 'bPT': '\033[40m', # Fundo Preto
116
+ 'bCE': '\033[100m', # Fundo Cinza Escuro
117
+ 'bCL': '\033[47m', # Fundo Cinza Claro
118
+ 'bVM': '\033[41m', # Fundo Vermelho
119
+ 'bVD': '\033[42m', # Fundo Verde
120
+ 'bAM': '\033[43m', # Fundo Amarelo
121
+ 'bAZ': '\033[44m', # Fundo Azul
122
+ 'bMG': '\033[45m', # Fundo Magenta
123
+ 'bCY': '\033[46m', # Fundo Ciano
124
+ 'bBC': '\033[107m' # Fundo Branco
125
+ }
126
+ color_code = COLORS.get(color, '')
127
+ style_code = STYLES.get(style, '')
128
+ RS_code = COLORS['RS']
129
+ return f"{color_code}{style_code}{text}{RS_code}"
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:
@@ -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
- - `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)
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.2
3
+ Version: 2.2.4
4
4
  Summary:
5
5
  Author: Cristiano P. Ferrari
6
6
  Author-email: cristiano.ferrari@lbx.com.br
@@ -43,66 +43,67 @@ 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
- - `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
+ - `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
- - `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
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
- - `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
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
- - `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
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
- - `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
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
- - `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_)
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
- - `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`**)
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
- - `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)
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
+ - `cor` Altera cores de fonte e funto e estilos (negrito/sublinhado)
106
107
 
107
108
  ## Instalação e uso:
108
109
 
@@ -194,7 +195,7 @@ Payload = {
194
195
  }
195
196
  EndPoint = f'{UrlBase}/bills/{Nutitulo}/installments/{Nuparcela}'
196
197
 
197
- `chama` o endpoint e recebe o retorno no objeto AlteraVcto
198
+ #chama o endpoint e recebe o retorno no objeto AlteraVcto
198
199
  AlteraVcto = ApiSienge.endpoint_json(EndPoint, 'patch', Payload)
199
200
  ```
200
201
 
@@ -222,8 +223,8 @@ Este recurso tem o propósito de controlar as permissões de execução do scrip
222
223
 
223
224
  Essa classe possui apenas dois métodos:
224
225
 
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.
226
+ - `auth_EntraID.disclaimer()`: apenas exibe uma tela de informações/instruções ao usuário.
227
+ - `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
228
 
228
229
  É 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
230
  Sugerimos não armazenar estas ou outras informações sensíveis no script. Considere usar o pacote `dotenv` para isso.
@@ -252,7 +253,7 @@ auth.disclaimer()
252
253
 
253
254
  auth.valida_grupo('Nome do Grupo de Distribuição')
254
255
  # se usuário não pertencer a grupo informado, a execução do script é abortada.
255
- ```
256
+ ```
256
257
 
257
258
  <a id="lbxtoolkit.config_manager"></a>
258
259
 
@@ -266,7 +267,7 @@ auth.valida_grupo('Nome do Grupo de Distribuição')
266
267
  class ConfigManager()
267
268
  ```
268
269
 
269
- #### Classe **auth_EntraID**
270
+ #### Classe **ConfigManager**
270
271
 
271
272
  É um singleton que garante que todas as partes do código usem a mesma instância e, portanto, compartilhem a mesma configuração.
272
273
 
@@ -307,35 +308,35 @@ Todos os parametros são nominativos e facultativos. Em caso de omissão, os val
307
308
 
308
309
  Os parametros para o instanciamento da classe são:
309
310
 
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*.
311
+ - `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.
312
+ - `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:
313
+ - `logging.DEBUG`: para manipular chamadas do método *.debug()* e acima.
314
+ - `logging.INFO`: para manipular chamadas do método *.info()* e acima.
315
+ - `logging.WARNING`: para manipular chamadas do método *.aviso()* e acima.
316
+ - `logging.ERROR`: para manipular chamadas do método *.erro()* e acima.
317
+ - `logging.CRITICAL`: para manipular chamadas do método *.critico()* e acima.
318
+ - `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)
319
+ - `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.
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*.
321
322
 
322
323
  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
324
 
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
- ```
325
+ ```python
326
+ log.erro('Essa mensagem apenas resulta em uma mensagem de nível ERROR')
327
+ log.erro('Essa mensagem resulta em uma mensagem de nível ERRO e encerra o script com código de retorno -1', exit=-1)
328
+ ```
328
329
 
329
330
  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
331
  Para retornar ao comportamente padrão do comando print, ou interromper o manipulador, faça chamada ao método `.stop_logging()`
331
332
 
332
333
  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
334
 
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
- ```
335
+ ```python
336
+ log.add('Mensagem 1# ') ## não será exibida/registrada
337
+ log.add('Mensagem 2# ') ## não será exibida/registrada
338
+ log.info('Mensagem 3) ## será exibida/registrada como nível "info" e com texto: "Mensagem 1# Mensagem 2# Mensagem 3"
339
+ ```
339
340
 
340
341
  3. Os métodos que exibem as mensagens (`.debug()`,`.info()`,`.aviso()`, `.erro()`, `.critico()`) possuem 3 parametros: `message`, `corte=None`, `exit=None`.
341
342
 
@@ -345,88 +346,88 @@ log.info('Mensagem 3) ## será exibida/registrada como nível "info" e com texto
345
346
 
346
347
  4. O método `.filtra()` possui 3 parametros posicionais, todos opcionais: `log_file`, `dh_ini`, `dh_fim`.
347
348
 
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
+ 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
350
 
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
+ 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
352
 
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
+ 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
354
 
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
+ 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
356
 
356
- A saída dessa função retorna um objeto, que pode ser salvo em disco ou impresso na tela.
357
+ A saída dessa função retorna um objeto, que pode ser salvo em disco ou impresso na tela.
357
358
 
358
359
 
359
360
  5. Exemplos de uso:
360
361
 
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
- ```
362
+ ```python
363
+ from lbx_toolkit import lbx_logger
364
+ import logging
365
+ import os
366
+ from pathlib import Path
367
+
368
+ DirBase = Path('./') # diretório corrente do script
369
+ BaseName = os.path.splitext(os.path.basename(__file__))[0] # nome do script sem extensão
370
+ LogFile = Path(DirBase, BaseName + '.log') # salva logs no diretório corrente, em um arquivo nomeado com nome do script + extensão ".log"
371
+
372
+ ### instancia o manipulador para tratar todas as mensagens (nível DEBUG acima),
373
+ # mas suprime a apresentação em tela das mensagens de nível "DEBUG" na tela,
374
+ # apenas registrando-as somente no arquivo
375
+ # e sumprime o registro no arquivo das mensagens de nível "ERROR",
376
+ # mostrando-as apenas na tela
377
+ log = lbx_logger(LogFile, logging.DEBUG, ignore_console=[logging.DEBUG], ignore_file=[logging.ERROR])
378
+
379
+ # Exemplo de mensagens de log
380
+ log.debug('Esta é uma mensagem de debug')
381
+ log.info('Esta é uma mensagem informativa')
382
+ log.add('Esta mensagem não será exibida agora, mas acumulada no buffer# ')
383
+ log.aviso('Esta é uma mensagem de aviso')
384
+ log.erro('Esta é uma mensagem de erro')
385
+ log.erro('Esta é uma mensagem erro muito comprida e será limitada a 40 caracteres, o restante será cortado e ingorado ao ser manipulado', 40)
386
+ log.critico('Esta é uma mensagem crítica')
387
+
388
+ # Exemplo de função que gera uma exceção
389
+ def funcao_com_erro():
390
+ raise ValueError('Este é um erro de exemplo')
391
+
392
+ # Testando redirecionamento de print e captura de exceção
393
+ print('Mensagem de teste via print')
394
+ try:
395
+ funcao_com_erro()
396
+ except Exception as e:
397
+ print(f'Capturado um erro: {e}')
398
+
399
+ log.erro('Essa é uma mensagem de erro e abortará a execução do script', exit=1)
400
+
401
+ log.info('Essa mensagem não será exibida pois o script foi abortado na mensagem anterior')
402
+
403
+ # obtem os registros de log da última hora (comportamento padrão)
404
+ filtra_log = log.search()
405
+
406
+ # obtem os registros das últimas 6 horas
407
+ ultimas_6h = datetime.datetime.now() - datetime.timedelta(hours=6) ## carimbo de tempo de 6 horas atrás !!! requer import datetime
408
+ 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)
409
+
410
+ # obtem os registros do dia 14/01/2020 até 3h atrás
411
+ ultimas_3h = datetime.datetime.now() - datetime.timedelta(hours=3) ## carimbo de tempo de 6 horas atrás !!! requer import datetime
412
+ filtra_log = log.search(None, '14/01/2020 00:00', ultimas_3h) #
413
+
414
+ # obtem os registros do horário comercial do dia 23/12/2023 do arquivo salvo em C:\temp\outro_arquivo.log
415
+ Outro_Log = Path(r'c:\temp\outro_arquivo.log')
416
+ filtra_log = log.search(Outro_Log, '23/12/2023 08:00', '23/12/2023 18:00') #
417
+
418
+ # salva conteúdo filtrado em um arquivo:
419
+ filtrado = 'filtered_log.txt'
420
+ with open(filtado, 'w', encoding='ISO-8859-1') as output_file: # indique o enconding conforme salvo (UTF-8 ou ISO-8859-1)
421
+ output_file.writelines(filta_log)
422
+
423
+ # mostra o conteúdo filtrado na tela
424
+ print(''.join(filtra_log))
425
+
426
+ # mostra o conteúdo filtrado na tela, listando apenas as os registros do nível "DEBUG"
427
+ for line in filtered_lines:
428
+ if "DEBUG" in line:
429
+ print(line, end='')
430
+ ```
430
431
 
431
432
  <a id="lbxtoolkit.lbx_logger.SafeLogger"></a>
432
433
 
@@ -458,11 +459,12 @@ Classe que reune pequenas funções uteis para agilizar tarefas comuns.
458
459
 
459
460
  Sintaxe e exemplos de uso. Parametros omissos assume-se os valores padrão indicados abaixo:
460
461
 
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()`
462
+ - `Arquivo = seleciona_arquivo(DirBase, TiposArquivo=[('Todos os arquivos', '*.*')], Titulo='Selecionar arquivo')`
463
+ - `Diretório = seleciona_dir(DirBase=Path(r'./'), Titulo='Selecionar diretório'):`
464
+ - `NomeLimpo = normaliza('String # SEM Noção!') # string_sem_nocao`
465
+ - `cmd_window = get_cmd_window()`
466
+ - `maximize_console()`
467
+ - `print(cor('Texto branco ', 'BC') + cor('Texto preto ', 'PT'))`
466
468
 
467
469
  <a id="lbxtoolkit.postgresql"></a>
468
470
 
@@ -482,131 +484,131 @@ Recursos de interação com o banco de dados relacional PostgreSQL
482
484
 
483
485
  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
486
 
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
- }
487
+ ```python
488
+ credenciais = {
489
+ 'dbname': 'NOME_BANCO',
490
+ 'user': 'USUARIO'',
491
+ 'password': 'SENHA',
492
+ 'host': 'IP_OU_DNS_SERVIDOR',
493
+ 'port': 'PORTA_POSTGRESQL', ## padrão = 5432
494
+ }
493
495
 
494
- conexao = postgreSQL.db(credenciais)
495
- ```
496
+ conexao = postgreSQL.db(credenciais)
497
+ ```
496
498
 
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.
499
+ 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
500
 
499
- Qualquer argumento de conexão previsto no pacote *psycopg2* são aceitos como entrada no dicionário acima.
501
+ Qualquer argumento de conexão previsto no pacote *psycopg2* são aceitos como entrada no dicionário acima.
500
502
 
501
503
  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
504
 
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
- ```
505
+ ```python
506
+ from pathlib import Path
507
+ arquivo_csv = Path('./diretorio/arquivo_exemplo.csv')
508
+ dados = postgreSQL.csv_df(arquivo_csv, CsvDelim=',') # usando vírgula como separador. se omisso, assume ";'
509
+ ```
508
510
 
509
511
  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
512
 
511
- A assinatura da função é `postgreSQL.db_insert_df([conexao], [dataframe_origem], [tabela_destino], Schema=None, Colunas=None, OnConflict=None)`
513
+ A assinatura da função é `postgreSQL.db_insert_df([conexao], [dataframe_origem], [tabela_destino], Schema=None, Colunas=None, OnConflict=None)`
512
514
 
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
+ É necessário que os nomes das colunas do dataframe coincidam com o nome das colunas da tabela.
516
+ Não há como traduzir/compatibilizar (de-para) nomes de colunas entre o dataframe e a tabela.
515
517
 
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
+ 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.
519
+ 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
520
 
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.
521
+ O parametro opcional `Colunas` espera um objeto do tipo _lista_ que contenha a relação das colunas a serem importadas.
522
+ As colunas listadas neste objeto precisam existir nas duas pontas (dataframe e tabela).
523
+ 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
524
 
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.
525
+ 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
526
 
525
- Exemplo de uso:
527
+ Exemplo de uso:
526
528
 
527
- ```python
528
- from lbx_toolkit import postgreSQL
529
- from pathlib import Path
529
+ ```python
530
+ from lbx_toolkit import postgreSQL
531
+ from pathlib import Path
530
532
 
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
- }
533
+ credenciais = {
534
+ 'dbname': 'NOME_BANCO',
535
+ 'user': 'USUARIO'',
536
+ 'password': 'SENHA',
537
+ 'host': 'IP_OU_DNS_SERVIDOR',
538
+ 'port': 'PORTA_POSTGRESQL', ## padrão = 5432
539
+ }
538
540
 
539
- conexao = postgreSQL.db(credenciais)
541
+ conexao = postgreSQL.db(credenciais)
540
542
 
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
+ arquivo_csv = Path('./diretorio/arquivo_exemplo.csv')
544
+ dados = postgreSQL.csv_df(arquivo_csv, CsvDelim=',') # usando vírgula como separador. se omisso, assume ";'
543
545
 
544
- postgreSQL.db_insert_df(conexao, dados, 'teste_table', Schema='meu_esquema', OnConflict='on conflict (coluna_chave_primaria) do nothing')
546
+ postgreSQL.db_insert_df(conexao, dados, 'teste_table', Schema='meu_esquema', OnConflict='on conflict (coluna_chave_primaria) do nothing')
545
547
 
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
- ```
548
+ # conexão com o banco precisa ser fechada explicitamente após a chamada do método, caso não seja mais utilizada:
549
+ conexao.close()
550
+ ```
549
551
 
550
552
  4. O método `postgreSQl.db_select()` executa consultas no banco de dados e retorna um `cursor` com o resultado.
551
553
 
552
- A assinatura da função é `postgreSQL.db_select([conexao], [query])`
554
+ A assinatura da função é `postgreSQL.db_select([conexao], [query])`
553
555
 
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.
556
+ 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
557
 
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.
558
+ 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
559
 
558
- A função retorna *dois objetos*, o primeiro contendo os dados do cursor, o segundo, contendo os nomes das respectivas colunas.
560
+ A função retorna *dois objetos*, o primeiro contendo os dados do cursor, o segundo, contendo os nomes das respectivas colunas.
559
561
 
560
- Exemplo de uso:
562
+ Exemplo de uso:
561
563
 
562
- ```python
563
- from lbx_toolkit import postgreSQL
564
- from pathlib import Path
564
+ ```python
565
+ from lbx_toolkit import postgreSQL
566
+ from pathlib import Path
565
567
 
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
- }
568
+ credenciais = {
569
+ 'dbname': 'NOME_BANCO',
570
+ 'user': 'USUARIO'',
571
+ 'password': 'SENHA',
572
+ 'host': 'IP_OU_DNS_SERVIDOR',
573
+ 'port': 'PORTA_POSTGRESQL', ## padrão = 5432
574
+ }
573
575
 
574
- conexao = postgreSQL.db(credenciais)
576
+ conexao = postgreSQL.db(credenciais)
575
577
 
576
- query = 'select * from meu_esquema.teste_table'
578
+ query = 'select * from meu_esquema.teste_table'
577
579
 
578
- dados, colunas = postgreSQL.db_select(conexao, query)
579
- conexao.close()
580
- ```
580
+ dados, colunas = postgreSQL.db_select(conexao, query)
581
+ conexao.close()
582
+ ```
581
583
 
582
584
  5. O método `postgreSQl.db_update()` executa updates no banco
583
585
 
584
- A assinatura da função é `postgreSQL.db_update([conexao], [query])`
586
+ A assinatura da função é `postgreSQL.db_update([conexao], [query])`
585
587
 
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.
588
+ 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
589
 
588
- A função retorna *a quantidade de linhas alteradas*.
590
+ A função retorna *a quantidade de linhas alteradas*.
589
591
 
590
- Exemplo de uso:
592
+ Exemplo de uso:
591
593
 
592
- ```python
593
- from lbx_toolkit import postgreSQL
594
- from pathlib import Path
594
+ ```python
595
+ from lbx_toolkit import postgreSQL
596
+ from pathlib import Path
595
597
 
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
- }
598
+ credenciais = {
599
+ 'dbname': 'NOME_BANCO',
600
+ 'user': 'USUARIO'',
601
+ 'password': 'SENHA',
602
+ 'host': 'IP_OU_DNS_SERVIDOR',
603
+ 'port': 'PORTA_POSTGRESQL', ## padrão = 5432
604
+ }
603
605
 
604
- conexao = postgreSQL.db(credenciais)
606
+ conexao = postgreSQL.db(credenciais)
605
607
 
606
- query = "update meu_esquema.teste_table set coluna='novo_valor' where pk='chave'"
608
+ query = "update meu_esquema.teste_table set coluna='novo_valor' where pk='chave'"
607
609
 
608
- result = postgreSQL.db_update(conexao, query)
609
- conexao.close()
610
+ result = postgreSQL.db_update(conexao, query)
611
+ conexao.close()
610
612
  ```
611
613
 
612
614
  <a id="lbxtoolkit.service"></a>
@@ -655,7 +657,7 @@ O objetos mandatórios a serem inicilizados pelo **ConfigManager** são:
655
657
  > [!NOTE]
656
658
  > 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
659
 
658
- > [!CAUTION]
660
+ > [!CAUTION]
659
661
  > **Não inicialize diretamente a classe!!**
660
662
  > Sempre crie uma classe local que herde esta classe
661
663
 
@@ -753,7 +755,7 @@ class ServicerConfig(Servicer):
753
755
  if __name__ == "__main__":
754
756
 
755
757
  Daemon.main()
756
- ````
758
+ ```
757
759
 
758
760
  <a id="lbxtoolkit.service.Servicer.main"></a>
759
761
 
@@ -952,10 +954,10 @@ class ServicoWindows(win32serviceutil.ServiceFramework)
952
954
 
953
955
  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
956
 
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)
957
+ - `SvcInstall`: Cria um serviço do windows com base neste script
958
+ - `SvcRemove`: Remove o serviço do windows configurado à partir de `SvcInstall`
959
+ - `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)
960
+ - `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
961
 
960
962
  <a id="lbxtoolkit.service_windows.ServicoWindows.SvcInstall"></a>
961
963
 
@@ -0,0 +1,12 @@
1
+ lbxtoolkit/__init__.py,sha256=DbLn2XbgrDKcPhk0MR5hmFYVIRTOjyF_HSmKw1JtSOQ,5923
2
+ lbxtoolkit/api_rest.py,sha256=vuehp8CevkiDThjV7ofYmnPUgsBOrw3B_L-jnn5Kxx0,11228
3
+ lbxtoolkit/auth_entra_id.py,sha256=2iE7KpRhdh4u7Y4lem63IUkEPl_GpSLRSw45_Byn1s0,21922
4
+ lbxtoolkit/config_manager.py,sha256=n3pVsxKykiYsgRuJNcNrq-bdEAjDHLmeCySl33DsoNE,1629
5
+ lbxtoolkit/lbx_logger.py,sha256=45raalyTX45OwVOk3I7W8B4tDnIaU2j2cYsprn7SREk,22854
6
+ lbxtoolkit/misc.py,sha256=RCIsIi1z_QSZW_jMEHYR9QSO0hdppKwV_QnKH7AVg8A,5282
7
+ lbxtoolkit/postgresql.py,sha256=UzjeA675cDG0_reVLUf_2UJm1X_r7wRfAsxAmaYRzhk,10898
8
+ lbxtoolkit/service.py,sha256=Jjqq-ovB5YBue4bRRYCix9v4QDwyWoABH0AYO03yvfY,18938
9
+ lbxtoolkit/service_windows.py,sha256=LTqITqOEWVSvp5slHG7NpRZV0-NYqI9tAgMXRvkSibM,15226
10
+ lbxtoolkit-2.2.4.dist-info/METADATA,sha256=KZVMetGg-3BExTIA7bATqVebHzZA0eufqaUx_y6IOrQ,46701
11
+ lbxtoolkit-2.2.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
12
+ lbxtoolkit-2.2.4.dist-info/RECORD,,
@@ -1,12 +0,0 @@
1
- lbxtoolkit/__init__.py,sha256=44ojkLaBn3xC5Ejuiua_4CHP4JAN3rybRjElJAm3EwA,5850
2
- lbxtoolkit/api_rest.py,sha256=vuehp8CevkiDThjV7ofYmnPUgsBOrw3B_L-jnn5Kxx0,11228
3
- lbxtoolkit/auth_entra_id.py,sha256=2iE7KpRhdh4u7Y4lem63IUkEPl_GpSLRSw45_Byn1s0,21922
4
- lbxtoolkit/config_manager.py,sha256=Bjll1vbndi2vyLYksK2_8T7kFAWTCJJzpS2oI6z-2YQ,1628
5
- lbxtoolkit/lbx_logger.py,sha256=45raalyTX45OwVOk3I7W8B4tDnIaU2j2cYsprn7SREk,22854
6
- lbxtoolkit/misc.py,sha256=CYPlrOQTuyql-LPDqG2NXCHq5-JhxttmBRLZMSVdHhA,3113
7
- lbxtoolkit/postgresql.py,sha256=UzjeA675cDG0_reVLUf_2UJm1X_r7wRfAsxAmaYRzhk,10898
8
- lbxtoolkit/service.py,sha256=N94WmVj8i5Pay2LKgr37jIcHQoRH4WiQEX8cKwb3xYc,18942
9
- lbxtoolkit/service_windows.py,sha256=WkaOLTfJyeR1kUnYSQDZAJmGcA9KciyCEDlpQLWUHkE,15242
10
- lbxtoolkit-2.2.2.dist-info/METADATA,sha256=oh7dr4pTD6cBgDlU6bo3fEjTiR1Od_zhk9rAoBoJZgE,46191
11
- lbxtoolkit-2.2.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
12
- lbxtoolkit-2.2.2.dist-info/RECORD,,