lbxtoolkit 2.0.1__tar.gz → 2.0.3__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.0.1
3
+ Version: 2.0.3
4
4
  Summary: Biblioteca de ferramentas LBX S/A
5
5
  Author: Cristiano P. Ferrari
6
6
  Author-email: boxferrari@gmail.com
@@ -19,6 +19,7 @@ Requires-Dist: requests
19
19
  Requires-Dist: selenium
20
20
  Requires-Dist: webdriver-manager
21
21
  Requires-Dist: validators
22
+ Requires-Dist: pygetwindow
22
23
 
23
24
  # Biblioteca de ferramentas LBX S/A
24
25
 
@@ -43,14 +44,21 @@ Esta biblioteca possui ferramentas de uso recorrente para interação com banco
43
44
  - _.auth_base_: Autentica (HTTPBasicAuth) sessão na API
44
45
  - _.auth_bearer_: Autentica sessão na API pelos métodos: OAuth, JWT, Bearer
45
46
  - _.endpoint_json_: Realizad chama ao endpoint. Payload em formato `json` opcional.
47
+ - _.trata_erro_sienge_: Retorna a mensagem de erro do Sienge caso código de retorno seja diferente de 200.
46
48
  - _.close_: Encerra a sessão autenticada
47
49
 
48
50
  **lbx_logger**: Manipula e formata as mensagens de saída do script para direcioná-las para tela (stdout) e/ou arquivo de log
49
51
  - _.add_: Adiciona a mensagem a um _buffer_ sem exibir, acumulando até a próxima chamada em algum dos níveis abaixo.
50
- - _.debug, .info, .aviso, .erro, .critico_:
51
- 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
52
+ - _.print_: Contorna o manipulador de log e imprime diretamente na tela (stdout), sem formatar a mensagem nem registrar no arquivo
53
+ - _.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
52
54
  - _.stop_logging_: Interrompe a manipulação das saídas pelo logger e restaura as saídas padrão (stdout/stderr) para a tela
53
55
 
56
+ **misc**: Classe de miscelâneas/diversos
57
+ - _.seleciona_arquivo_: Abre um picker do sistema operacionar para selecionar um *arquivo* e retorna seu path
58
+ - _.seleciona_dir_: Abre um picker do sistema operacionar para selecionar um *diretório* e retorna seu path
59
+ - _.normaliza_: Limpa caracteres especiais e espaços de strings e retorna tudo em minúsculo
60
+ - _.get_cmd_window_: Captura a referencia da janela atual (cmd.exe) para retornar o foco à ela depois de chamar os pickers
61
+ - _.maximize_console_: Maxima a janela do console (cmd.exe)
54
62
 
55
63
  ## Instalação e uso:
56
64
 
@@ -411,4 +419,14 @@ log.erro('Essa é uma mensagem de erro e abortará a execução do script', exit
411
419
  log.info('Essa mensagem não será exibida pois o script foi abortado na mensagem anterior')
412
420
  ```
413
421
 
422
+ #### Classe **misc**
414
423
 
424
+ Classe que reune pequenas funções uteis para agilizar tarefas comuns.
425
+
426
+ Sintaxe e exemplos de uso. Parametros omissos assume os valores padrão indicados abaixo:
427
+
428
+ - `Arquivo = seleciona_arquivo(DirBase, TiposArquivo=[('Todos os arquivos', '*.*')], Titulo='Selecionar arquivo')`
429
+ - `Diretório = seleciona_dir(DirBase=Path(r'./'), Titulo='Selecionar diretório'):`
430
+ - `NomeLimpo = normaliza('String # SEM Noção!') #>>> string_sem_nocao`
431
+ - `cmd_window = get_cmd_window()`
432
+ - `maximize_console()`
@@ -1,25 +1,3 @@
1
- Metadata-Version: 2.1
2
- Name: lbxtoolkit
3
- Version: 2.0.1
4
- Summary: Biblioteca de ferramentas LBX S/A
5
- Author: Cristiano P. Ferrari
6
- Author-email: boxferrari@gmail.com
7
- License: MIT License
8
- Classifier: Programming Language :: Python :: 3
9
- Classifier: License :: OSI Approved :: MIT License
10
- Classifier: Operating System :: OS Independent
11
- Requires-Python: >=3.6
12
- Description-Content-Type: text/markdown
13
- License-File: LICENSE
14
- Requires-Dist: psycopg2
15
- Requires-Dist: pandas
16
- Requires-Dist: numpy
17
- Requires-Dist: msal
18
- Requires-Dist: requests
19
- Requires-Dist: selenium
20
- Requires-Dist: webdriver-manager
21
- Requires-Dist: validators
22
-
23
1
  # Biblioteca de ferramentas LBX S/A
24
2
 
25
3
  Esta biblioteca possui ferramentas de uso recorrente para interação com banco de dados e API, além de autenticação/validação de credenciais de usuário no Microsoft Entra ID
@@ -43,14 +21,21 @@ Esta biblioteca possui ferramentas de uso recorrente para interação com banco
43
21
  - _.auth_base_: Autentica (HTTPBasicAuth) sessão na API
44
22
  - _.auth_bearer_: Autentica sessão na API pelos métodos: OAuth, JWT, Bearer
45
23
  - _.endpoint_json_: Realizad chama ao endpoint. Payload em formato `json` opcional.
24
+ - _.trata_erro_sienge_: Retorna a mensagem de erro do Sienge caso código de retorno seja diferente de 200.
46
25
  - _.close_: Encerra a sessão autenticada
47
26
 
48
27
  **lbx_logger**: Manipula e formata as mensagens de saída do script para direcioná-las para tela (stdout) e/ou arquivo de log
49
28
  - _.add_: Adiciona a mensagem a um _buffer_ sem exibir, acumulando até a próxima chamada em algum dos níveis abaixo.
50
- - _.debug, .info, .aviso, .erro, .critico_:
51
- 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
29
+ - _.print_: Contorna o manipulador de log e imprime diretamente na tela (stdout), sem formatar a mensagem nem registrar no arquivo
30
+ - _.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
52
31
  - _.stop_logging_: Interrompe a manipulação das saídas pelo logger e restaura as saídas padrão (stdout/stderr) para a tela
53
32
 
33
+ **misc**: Classe de miscelâneas/diversos
34
+ - _.seleciona_arquivo_: Abre um picker do sistema operacionar para selecionar um *arquivo* e retorna seu path
35
+ - _.seleciona_dir_: Abre um picker do sistema operacionar para selecionar um *diretório* e retorna seu path
36
+ - _.normaliza_: Limpa caracteres especiais e espaços de strings e retorna tudo em minúsculo
37
+ - _.get_cmd_window_: Captura a referencia da janela atual (cmd.exe) para retornar o foco à ela depois de chamar os pickers
38
+ - _.maximize_console_: Maxima a janela do console (cmd.exe)
54
39
 
55
40
  ## Instalação e uso:
56
41
 
@@ -411,4 +396,14 @@ log.erro('Essa é uma mensagem de erro e abortará a execução do script', exit
411
396
  log.info('Essa mensagem não será exibida pois o script foi abortado na mensagem anterior')
412
397
  ```
413
398
 
399
+ #### Classe **misc**
400
+
401
+ Classe que reune pequenas funções uteis para agilizar tarefas comuns.
402
+
403
+ Sintaxe e exemplos de uso. Parametros omissos assume os valores padrão indicados abaixo:
414
404
 
405
+ - `Arquivo = seleciona_arquivo(DirBase, TiposArquivo=[('Todos os arquivos', '*.*')], Titulo='Selecionar arquivo')`
406
+ - `Diretório = seleciona_dir(DirBase=Path(r'./'), Titulo='Selecionar diretório'):`
407
+ - `NomeLimpo = normaliza('String # SEM Noção!') #>>> string_sem_nocao`
408
+ - `cmd_window = get_cmd_window()`
409
+ - `maximize_console()`
@@ -18,6 +18,13 @@ import numpy as np
18
18
  from http.server import BaseHTTPRequestHandler, HTTPServer
19
19
  import urllib.parse as urlparse
20
20
  import validators
21
+ from pathlib import Path
22
+ import tkinter as tk
23
+ from tkinter import filedialog
24
+ import re
25
+ from unicodedata import normalize
26
+ import pygetwindow as gw
27
+ import ctypes
21
28
 
22
29
  locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')
23
30
 
@@ -535,6 +542,25 @@ class api_rest: # Classe para interação com APIs Rest (especialmente Sienge)
535
542
  except Exception as Err:
536
543
  self.logger.critico(f'Falha na chamada do endpoint: {Err}\nEndpoint: {self.EndPoint}\nCodigo retorno: {self.RetEndPoint.status_code}\nResposta:{self.RetEndPoint.text}', exit=1)
537
544
 
545
+ def trata_erro_sienge(CodRet, Retorno):
546
+ if not 200 <= CodRet <= 299:
547
+ try:
548
+ DicRetorno = eval(Retorno.replace('null','None').replace(r'\n\t',' '))
549
+ if 'clientMessage' in DicRetorno:
550
+ MsgErro = DicRetorno['clientMessage']
551
+ elif 'developerMessage' in DicRetorno:
552
+ MsgErro = DicRetorno['developerMessage']
553
+ elif 'message' in DicRetorno:
554
+ MsgErro = DicRetorno['message']
555
+ else:
556
+ MsgErro = Retorno
557
+ except:
558
+ MsgErro = Retorno.replace(r'\n\t',' ')
559
+ finally:
560
+ return MsgErro
561
+ else:
562
+ return Retorno
563
+
538
564
  def close(self): # Encerra a cessão
539
565
  self.Sessao.close()
540
566
 
@@ -603,6 +629,10 @@ class lbx_logger: # Classe para gerenciar a saída para log
603
629
  return
604
630
  self.logger.error("Exceção não prevista", exc_info=(exc_type, exc_value, exc_traceback))
605
631
 
632
+ def print(self, *args, **kwargs):
633
+ # Imprime diretamente na saída padrão
634
+ print(*args, **kwargs, file=self.original_stdout)
635
+
606
636
  def add(self, message, corte=None):
607
637
  message = message[:corte] if corte else message
608
638
  self.msg = self.msg + message if not message is None else self.msg
@@ -662,3 +692,57 @@ class lbx_logger: # Classe para gerenciar a saída para log
662
692
  for handler in handlers:
663
693
  handler.close()
664
694
  self.logger.removeHandler(handler)
695
+
696
+ class misc: # Classe de miscelâneas
697
+ def __init__(self):
698
+ return None
699
+
700
+ # Picker para selecionar arquivo
701
+ def seleciona_arquivo(DirBase, TiposArquivo=[('Todos os arquivos', '*.*')], Titulo='Selecionar arquivo'):
702
+ root = tk.Tk()
703
+ root.withdraw() # Esconde a janela principal do Tkinter
704
+ Arquivo = filedialog.askopenfilename(initialdir=DirBase, filetypes=TiposArquivo, title=Titulo)
705
+ Arquivo = Path(Arquivo)
706
+ root.destroy()
707
+ return Arquivo
708
+
709
+ # Picker para selecionar diretório
710
+ def seleciona_dir(DirBase=Path(r'./'), Titulo='Selecionar diretório'):
711
+ root = tk.Tk() # objeto picker (Tkinter)para selecionar arquivos e diretórios
712
+ root.withdraw() # Esconde a janela principal do Tkinter
713
+ Diretorio = filedialog.askdirectory(initialdir=DirBase, title=Titulo)
714
+ Diretorio = Path(Diretorio)
715
+ root.destroy()
716
+ return Diretorio
717
+
718
+ # Limpa e padroniza nomes
719
+ def normaliza(Original):
720
+ Lixo = r'/\\?%§ªº°`´^~*:|"<>!@#$%¨&*()_+=-[]{}"\' '
721
+ Normalizar = normalize('NFKD', Original).encode('ASCII', 'ignore').decode('ASCII')
722
+ RemoverLixo = [c if c not in Lixo else '_' for c in Normalizar]
723
+ Limpo = "".join(RemoverLixo)
724
+ Limpo = re.sub(r'\.(?=.*\.)', '_', Limpo) # troca todos os pontos por underline
725
+ Limpo = re.sub(r'_+', '_', Limpo) # limpa as reptições do underline
726
+ return Limpo.lower()
727
+
728
+ # Captura a referencia da janela atual para retornar o foco à ela depois de chamar os pickers
729
+ def get_cmd_window():
730
+ pid = os.getpid()
731
+ windows = gw.getWindowsWithTitle("")
732
+ for window in windows:
733
+ if window.title and window.visible and window.topleft:
734
+ return window
735
+ return None
736
+
737
+ def maximize_console():
738
+ # Ajustar o buffer de console
739
+ # os.system('mode con: cols=500 lines=100')
740
+
741
+ # Obter o handle da janela do console
742
+ kernel32 = ctypes.WinDLL('kernel32')
743
+ user32 = ctypes.WinDLL('user32')
744
+ hWnd = kernel32.GetConsoleWindow()
745
+
746
+ if hWnd:
747
+ # Definir as dimensões da tela
748
+ user32.ShowWindow(hWnd, 3) # 3 = SW_MAXIMIZE
@@ -1,3 +1,26 @@
1
+ Metadata-Version: 2.1
2
+ Name: lbxtoolkit
3
+ Version: 2.0.3
4
+ Summary: Biblioteca de ferramentas LBX S/A
5
+ Author: Cristiano P. Ferrari
6
+ Author-email: boxferrari@gmail.com
7
+ License: MIT License
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.6
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: psycopg2
15
+ Requires-Dist: pandas
16
+ Requires-Dist: numpy
17
+ Requires-Dist: msal
18
+ Requires-Dist: requests
19
+ Requires-Dist: selenium
20
+ Requires-Dist: webdriver-manager
21
+ Requires-Dist: validators
22
+ Requires-Dist: pygetwindow
23
+
1
24
  # Biblioteca de ferramentas LBX S/A
2
25
 
3
26
  Esta biblioteca possui ferramentas de uso recorrente para interação com banco de dados e API, além de autenticação/validação de credenciais de usuário no Microsoft Entra ID
@@ -21,14 +44,21 @@ Esta biblioteca possui ferramentas de uso recorrente para interação com banco
21
44
  - _.auth_base_: Autentica (HTTPBasicAuth) sessão na API
22
45
  - _.auth_bearer_: Autentica sessão na API pelos métodos: OAuth, JWT, Bearer
23
46
  - _.endpoint_json_: Realizad chama ao endpoint. Payload em formato `json` opcional.
47
+ - _.trata_erro_sienge_: Retorna a mensagem de erro do Sienge caso código de retorno seja diferente de 200.
24
48
  - _.close_: Encerra a sessão autenticada
25
49
 
26
50
  **lbx_logger**: Manipula e formata as mensagens de saída do script para direcioná-las para tela (stdout) e/ou arquivo de log
27
51
  - _.add_: Adiciona a mensagem a um _buffer_ sem exibir, acumulando até a próxima chamada em algum dos níveis abaixo.
28
- - _.debug, .info, .aviso, .erro, .critico_:
29
- 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
52
+ - _.print_: Contorna o manipulador de log e imprime diretamente na tela (stdout), sem formatar a mensagem nem registrar no arquivo
53
+ - _.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
30
54
  - _.stop_logging_: Interrompe a manipulação das saídas pelo logger e restaura as saídas padrão (stdout/stderr) para a tela
31
55
 
56
+ **misc**: Classe de miscelâneas/diversos
57
+ - _.seleciona_arquivo_: Abre um picker do sistema operacionar para selecionar um *arquivo* e retorna seu path
58
+ - _.seleciona_dir_: Abre um picker do sistema operacionar para selecionar um *diretório* e retorna seu path
59
+ - _.normaliza_: Limpa caracteres especiais e espaços de strings e retorna tudo em minúsculo
60
+ - _.get_cmd_window_: Captura a referencia da janela atual (cmd.exe) para retornar o foco à ela depois de chamar os pickers
61
+ - _.maximize_console_: Maxima a janela do console (cmd.exe)
32
62
 
33
63
  ## Instalação e uso:
34
64
 
@@ -389,4 +419,14 @@ log.erro('Essa é uma mensagem de erro e abortará a execução do script', exit
389
419
  log.info('Essa mensagem não será exibida pois o script foi abortado na mensagem anterior')
390
420
  ```
391
421
 
422
+ #### Classe **misc**
423
+
424
+ Classe que reune pequenas funções uteis para agilizar tarefas comuns.
425
+
426
+ Sintaxe e exemplos de uso. Parametros omissos assume os valores padrão indicados abaixo:
392
427
 
428
+ - `Arquivo = seleciona_arquivo(DirBase, TiposArquivo=[('Todos os arquivos', '*.*')], Titulo='Selecionar arquivo')`
429
+ - `Diretório = seleciona_dir(DirBase=Path(r'./'), Titulo='Selecionar diretório'):`
430
+ - `NomeLimpo = normaliza('String # SEM Noção!') #>>> string_sem_nocao`
431
+ - `cmd_window = get_cmd_window()`
432
+ - `maximize_console()`
@@ -6,3 +6,4 @@ requests
6
6
  selenium
7
7
  webdriver-manager
8
8
  validators
9
+ pygetwindow
@@ -8,7 +8,7 @@ with open("README.md", "r", encoding='utf-8') as fh:
8
8
 
9
9
  setup(
10
10
  name='lbxtoolkit',
11
- version='2.0.1',
11
+ version='2.0.3',
12
12
  packages=find_packages(),
13
13
  install_requires=[
14
14
  'psycopg2',
@@ -18,7 +18,8 @@ setup(
18
18
  'requests',
19
19
  'selenium',
20
20
  'webdriver-manager',
21
- 'validators'
21
+ 'validators',
22
+ 'pygetwindow'
22
23
  ],
23
24
  license='MIT License',
24
25
  description='Biblioteca de ferramentas LBX S/A',
File without changes
File without changes