rpa-suite 1.4.6__py3-none-any.whl → 1.4.8__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.
- rpa_suite/__init__.py +2 -0
- rpa_suite/core/__init__.py +1 -0
- rpa_suite/core/browser.py +8 -4
- rpa_suite/core/clock.py +5 -1
- rpa_suite/core/date.py +6 -2
- rpa_suite/core/dir.py +6 -1
- rpa_suite/core/email.py +6 -4
- rpa_suite/core/file.py +11 -2
- rpa_suite/core/log.py +8 -1
- rpa_suite/core/parallel.py +193 -0
- rpa_suite/core/print.py +4 -2
- rpa_suite/core/regex.py +6 -1
- rpa_suite/core/validate.py +5 -2
- rpa_suite/functions/__create_ss_dir.py +6 -2
- rpa_suite/functions/_printer.py +3 -1
- rpa_suite/suite.py +25 -2
- rpa_suite/utils/__init__.py +1 -0
- rpa_suite/utils/system.py +10 -1
- {rpa_suite-1.4.6.dist-info → rpa_suite-1.4.8.dist-info}/METADATA +21 -4
- rpa_suite-1.4.8.dist-info/RECORD +24 -0
- rpa_suite/functions/__create_log_dir.py +0 -83
- rpa_suite/functions/_functions_logger.py +0 -96
- rpa_suite/functions/_logger.py +0 -113
- rpa_suite/functions/_variables.py +0 -10
- rpa_suite/functions/_variables_uru.py +0 -11
- rpa_suite-1.4.6.dist-info/RECORD +0 -28
- {rpa_suite-1.4.6.dist-info → rpa_suite-1.4.8.dist-info}/WHEEL +0 -0
- {rpa_suite-1.4.6.dist-info → rpa_suite-1.4.8.dist-info}/licenses/LICENSE +0 -0
- {rpa_suite-1.4.6.dist-info → rpa_suite-1.4.8.dist-info}/top_level.txt +0 -0
rpa_suite/__init__.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# rpa_suite/__init__.py
|
2
|
+
|
2
3
|
"""
|
3
4
|
RPA Suite is a Python module that provides a set of tools for process automation.
|
4
5
|
|
@@ -59,5 +60,6 @@
|
|
59
60
|
``Browser``: Objeto de Automação de Navegadores (necessario Selenium e Webdriver_Manager)
|
60
61
|
"""
|
61
62
|
|
63
|
+
# allows importing the rpa_suite module without the package name
|
62
64
|
from .suite import rpa
|
63
65
|
rpa
|
rpa_suite/core/__init__.py
CHANGED
rpa_suite/core/browser.py
CHANGED
@@ -1,16 +1,20 @@
|
|
1
|
-
#
|
2
|
-
import os, requests
|
1
|
+
# rpa_suite/core/browser.py
|
3
2
|
|
4
|
-
# imports
|
3
|
+
# imports internal
|
5
4
|
from rpa_suite.functions._printer import error_print, alert_print, success_print
|
6
5
|
|
6
|
+
# imports external
|
7
7
|
from selenium import webdriver
|
8
8
|
from selenium.webdriver.common.by import By
|
9
9
|
from selenium.webdriver.chrome.options import Options
|
10
10
|
from selenium.webdriver.support.ui import WebDriverWait
|
11
11
|
from selenium.webdriver.support import expected_conditions as EC
|
12
12
|
from webdriver_manager.chrome import ChromeDriverManager
|
13
|
+
|
14
|
+
# imports third-party
|
13
15
|
from time import sleep
|
16
|
+
import os, requests
|
17
|
+
|
14
18
|
|
15
19
|
|
16
20
|
class Browser():
|
@@ -166,7 +170,7 @@ class Browser():
|
|
166
170
|
error_print(f'Erro ao iniciar navegador: {str(e)}.')
|
167
171
|
|
168
172
|
|
169
|
-
def find_ele(self, value, by=By.XPATH, timeout=12, display_message=True):
|
173
|
+
def find_ele(self, value: str, by:By=By.XPATH, timeout=12, display_message=True):
|
170
174
|
"""
|
171
175
|
Locate and return a web element on the page using the specified locator strategy.
|
172
176
|
Args:
|
rpa_suite/core/clock.py
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
+
# rpa_suite/core/clock.py
|
1
2
|
|
3
|
+
# imports internal
|
4
|
+
from rpa_suite.functions._printer import error_print, success_print
|
5
|
+
|
6
|
+
# imports third-party
|
2
7
|
import time
|
3
8
|
from typing import Callable, Any
|
4
9
|
from datetime import datetime as dt
|
5
|
-
from rpa_suite.functions._printer import error_print, success_print
|
6
10
|
from typing import Callable, Any
|
7
11
|
|
8
12
|
|
rpa_suite/core/date.py
CHANGED
@@ -1,9 +1,13 @@
|
|
1
|
-
# /date.py
|
1
|
+
# rpa_suite/core/date.py
|
2
2
|
|
3
|
+
# imports internal
|
4
|
+
from rpa_suite.functions._printer import error_print
|
5
|
+
|
6
|
+
# imports third-party
|
3
7
|
import datetime as dt
|
4
8
|
from typing import Optional as Op
|
5
9
|
from typing import Tuple
|
6
|
-
|
10
|
+
|
7
11
|
|
8
12
|
class Date():
|
9
13
|
"""
|
rpa_suite/core/dir.py
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
+
# rpa_suite/core/dir.py
|
1
2
|
|
3
|
+
# imports internal
|
4
|
+
from rpa_suite.functions._printer import error_print, alert_print, success_print
|
5
|
+
|
6
|
+
# imports third-party
|
2
7
|
import os, shutil
|
3
8
|
from typing import Union
|
4
|
-
|
9
|
+
|
5
10
|
|
6
11
|
|
7
12
|
class Directory():
|
rpa_suite/core/email.py
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
-
# /
|
1
|
+
# rpa_suite/core/email.py
|
2
2
|
|
3
|
-
|
3
|
+
# imports internal
|
4
|
+
from rpa_suite.functions._printer import alert_print, error_print, success_print
|
5
|
+
|
6
|
+
# imports third-party
|
7
|
+
import smtplib
|
4
8
|
from email.mime.image import MIMEImage
|
5
9
|
from email.mime.multipart import MIMEMultipart
|
6
10
|
from email.mime.text import MIMEText
|
7
11
|
from email.mime.base import MIMEBase
|
8
12
|
from email import encoders
|
9
|
-
from rpa_suite.functions._printer import alert_print, error_print, success_print
|
10
|
-
from rpa_suite.core.validate import email_validator
|
11
13
|
|
12
14
|
|
13
15
|
class Email():
|
rpa_suite/core/file.py
CHANGED
@@ -1,10 +1,19 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# rpa_suite/core/file.py
|
2
|
+
|
3
|
+
# imports internal
|
3
4
|
from rpa_suite.functions._printer import error_print, success_print, alert_print
|
4
5
|
from rpa_suite.functions.__create_ss_dir import __create_ss_dir as create_ss_dir
|
6
|
+
|
7
|
+
# imports external
|
5
8
|
from colorama import Fore
|
9
|
+
|
10
|
+
# imports third-party
|
11
|
+
import os, time
|
12
|
+
from datetime import datetime
|
6
13
|
from typing import Dict, List, Union
|
7
14
|
|
15
|
+
|
16
|
+
|
8
17
|
class File():
|
9
18
|
"""
|
10
19
|
Class that provides utilities for file management, including creation, deletion, and manipulation of files.
|
rpa_suite/core/log.py
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
-
|
1
|
+
# rpa_suite/core/log.py
|
2
|
+
|
3
|
+
# imports internal
|
2
4
|
from rpa_suite.functions._printer import error_print, alert_print, success_print
|
5
|
+
|
6
|
+
# imports external
|
3
7
|
from loguru import logger
|
8
|
+
|
9
|
+
# imports third-party
|
10
|
+
from typing import Optional as Op
|
4
11
|
import sys, os, inspect
|
5
12
|
|
6
13
|
|
@@ -0,0 +1,193 @@
|
|
1
|
+
# rpa_suite/core/parallel.py
|
2
|
+
|
3
|
+
from multiprocessing import Process, Manager
|
4
|
+
from typing import Any, Callable, Dict, Optional, TypeVar, Generic
|
5
|
+
import time
|
6
|
+
import traceback
|
7
|
+
|
8
|
+
# Definir tipo genérico para o retorno da função
|
9
|
+
T = TypeVar('T')
|
10
|
+
|
11
|
+
class ParallelRunner(Generic[T]):
|
12
|
+
|
13
|
+
"""
|
14
|
+
Classe para executar funções em paralelo mantendo o fluxo principal da aplicação.
|
15
|
+
|
16
|
+
Permite iniciar uma função em um processo separado e obter seu resultado posteriormente.
|
17
|
+
"""
|
18
|
+
|
19
|
+
def __init__(self):
|
20
|
+
"""Inicializa o ParallelRunner."""
|
21
|
+
self._manager = Manager()
|
22
|
+
self._result_dict = self._manager.dict()
|
23
|
+
self._process = None
|
24
|
+
self._start_time = None
|
25
|
+
|
26
|
+
@staticmethod
|
27
|
+
def _execute_function(function, args, kwargs, result_dict):
|
28
|
+
"""
|
29
|
+
Função estática que executa a função alvo e armazena o resultado.
|
30
|
+
Esta função precisa ser definida no nível do módulo para ser "picklable".
|
31
|
+
"""
|
32
|
+
try:
|
33
|
+
# Executa a função do usuário com os argumentos fornecidos
|
34
|
+
result = function(*args, **kwargs)
|
35
|
+
|
36
|
+
# Armazena o resultado no dicionário compartilhado
|
37
|
+
result_dict['status'] = 'success'
|
38
|
+
result_dict['result'] = result
|
39
|
+
|
40
|
+
# Para debug
|
41
|
+
print(f"[Processo Filho] Resultado calculado: {result}")
|
42
|
+
print(f"[Processo Filho] Dicionário de resultados: {dict(result_dict)}")
|
43
|
+
|
44
|
+
except Exception as e:
|
45
|
+
# Em caso de erro, armazena informações sobre o erro
|
46
|
+
result_dict['status'] = 'error'
|
47
|
+
result_dict['error'] = str(e)
|
48
|
+
result_dict['traceback'] = traceback.format_exc()
|
49
|
+
|
50
|
+
# Para debug
|
51
|
+
print(f"[Processo Filho] Erro ocorrido: {str(e)}")
|
52
|
+
|
53
|
+
def run(self, function: Callable[..., T], *args, **kwargs) -> 'ParallelRunner[T]':
|
54
|
+
"""
|
55
|
+
Inicia a execução da função em um processo paralelo.
|
56
|
+
|
57
|
+
Args:
|
58
|
+
function: Função a ser executada em paralelo
|
59
|
+
*args: Argumentos posicionais para a função
|
60
|
+
**kwargs: Argumentos nomeados para a função
|
61
|
+
|
62
|
+
Returns:
|
63
|
+
self: Retorna a própria instância para permitir chamadas encadeadas
|
64
|
+
"""
|
65
|
+
# Limpar resultado anterior, se houver
|
66
|
+
if self._result_dict:
|
67
|
+
self._result_dict.clear()
|
68
|
+
|
69
|
+
# Configura valores iniciais no dicionário compartilhado
|
70
|
+
self._result_dict['status'] = 'running'
|
71
|
+
|
72
|
+
# Inicia o processo com a função auxiliar estática
|
73
|
+
self._process = Process(
|
74
|
+
target=ParallelRunner._execute_function,
|
75
|
+
args=(function, args, kwargs, self._result_dict)
|
76
|
+
)
|
77
|
+
self._process.daemon = True # Processo filho termina quando o principal termina
|
78
|
+
self._process.start()
|
79
|
+
self._start_time = time.time()
|
80
|
+
|
81
|
+
return self
|
82
|
+
|
83
|
+
def is_running(self) -> bool:
|
84
|
+
"""
|
85
|
+
Verifica se o processo ainda está em execução.
|
86
|
+
|
87
|
+
Returns:
|
88
|
+
bool: True se o processo ainda estiver em execução, False caso contrário
|
89
|
+
"""
|
90
|
+
if self._process is None:
|
91
|
+
return False
|
92
|
+
return self._process.is_alive()
|
93
|
+
|
94
|
+
def get_result(self, timeout: Optional[float] = None, terminate_on_timeout: bool = True) -> Dict[str, Any]:
|
95
|
+
"""
|
96
|
+
Obtém o resultado da execução paralela.
|
97
|
+
|
98
|
+
Args:
|
99
|
+
timeout: Tempo máximo (em segundos) para aguardar o término do processo
|
100
|
+
None significa esperar indefinidamente
|
101
|
+
terminate_on_timeout: Se True, termina o processo caso o timeout seja atingido
|
102
|
+
|
103
|
+
Returns:
|
104
|
+
Dict contendo:
|
105
|
+
- success: bool indicando se a operação foi bem-sucedida
|
106
|
+
- result: resultado da função (se bem-sucedida)
|
107
|
+
- error: mensagem de erro (se houver)
|
108
|
+
- traceback: stack trace completo (se houver erro)
|
109
|
+
- execution_time: tempo de execução em segundos
|
110
|
+
- terminated: True se o processo foi terminado por timeout
|
111
|
+
"""
|
112
|
+
if self._process is None:
|
113
|
+
return {
|
114
|
+
'success': False,
|
115
|
+
'error': 'Nenhum processo foi iniciado',
|
116
|
+
'execution_time': 0,
|
117
|
+
'terminated': False
|
118
|
+
}
|
119
|
+
|
120
|
+
# Aguarda o processo terminar com tempo limite
|
121
|
+
self._process.join(timeout=timeout)
|
122
|
+
execution_time = time.time() - self._start_time
|
123
|
+
|
124
|
+
# Preparamos o dicionário de resposta
|
125
|
+
result = {
|
126
|
+
'execution_time': execution_time,
|
127
|
+
'terminated': False
|
128
|
+
}
|
129
|
+
|
130
|
+
# Debug - mostra o dicionário compartilhado
|
131
|
+
print(f"[Processo Principal] Dicionário compartilhado: {dict(self._result_dict)}")
|
132
|
+
|
133
|
+
# Verifica se o processo terminou ou se atingiu o timeout
|
134
|
+
if self._process.is_alive():
|
135
|
+
if terminate_on_timeout:
|
136
|
+
self._process.terminate()
|
137
|
+
self._process.join(timeout=1) # Pequeno timeout para garantir que o processo termine
|
138
|
+
result['terminated'] = True
|
139
|
+
result['success'] = False
|
140
|
+
result['error'] = f'Operação cancelada por timeout após {execution_time:.2f} segundos'
|
141
|
+
else:
|
142
|
+
result['success'] = False
|
143
|
+
result['error'] = f'Operação ainda em execução após {execution_time:.2f} segundos'
|
144
|
+
else:
|
145
|
+
# Processo terminou normalmente - verificamos o status
|
146
|
+
status = self._result_dict.get('status', 'unknown')
|
147
|
+
|
148
|
+
if status == 'success':
|
149
|
+
result['success'] = True
|
150
|
+
# Garantimos que o resultado está sendo copiado corretamente
|
151
|
+
if 'result' in self._result_dict:
|
152
|
+
result['result'] = self._result_dict['result']
|
153
|
+
else:
|
154
|
+
result['success'] = False
|
155
|
+
result['error'] = 'Resultado não encontrado no dicionário compartilhado'
|
156
|
+
else:
|
157
|
+
result['success'] = False
|
158
|
+
result['error'] = self._result_dict.get('error', 'Erro desconhecido')
|
159
|
+
if 'traceback' in self._result_dict:
|
160
|
+
result['traceback'] = self._result_dict['traceback']
|
161
|
+
|
162
|
+
# Finaliza o Manager se o processo terminou e não estamos mais esperando resultado
|
163
|
+
if not self._process.is_alive() and (result.get('success', False) or result.get('terminated', False)):
|
164
|
+
self._cleanup()
|
165
|
+
|
166
|
+
return result
|
167
|
+
|
168
|
+
def terminate(self) -> None:
|
169
|
+
"""
|
170
|
+
Termina o processo em execução.
|
171
|
+
"""
|
172
|
+
if self._process and self._process.is_alive():
|
173
|
+
self._process.terminate()
|
174
|
+
self._process.join(timeout=1)
|
175
|
+
self._cleanup()
|
176
|
+
|
177
|
+
def _cleanup(self) -> None:
|
178
|
+
"""
|
179
|
+
Limpa os recursos utilizados pelo processo.
|
180
|
+
"""
|
181
|
+
if hasattr(self, '_manager') and self._manager is not None:
|
182
|
+
try:
|
183
|
+
self._manager.shutdown()
|
184
|
+
except Exception:
|
185
|
+
pass
|
186
|
+
self._manager = None
|
187
|
+
self._process = None
|
188
|
+
|
189
|
+
def __del__(self):
|
190
|
+
"""
|
191
|
+
Destrutor da classe, garante que recursos sejam liberados.
|
192
|
+
"""
|
193
|
+
self.terminate()
|
rpa_suite/core/print.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
# rpa_suite/core/print.py
|
1
2
|
|
2
|
-
#
|
3
|
-
|
3
|
+
# imports external
|
4
4
|
from colorama import Fore
|
5
5
|
|
6
|
+
|
6
7
|
# Windows bash colors
|
7
8
|
class Colors():
|
8
9
|
black = f'{Fore.BLACK}'
|
@@ -17,6 +18,7 @@ class Colors():
|
|
17
18
|
call_fn = f'{Fore.LIGHTMAGENTA_EX}'
|
18
19
|
retur_fn = f'{Fore.LIGHTYELLOW_EX}'
|
19
20
|
|
21
|
+
|
20
22
|
class Print():
|
21
23
|
|
22
24
|
"""
|
rpa_suite/core/regex.py
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
+
# rpa_suite/core/regex.py
|
1
2
|
|
2
|
-
|
3
|
+
# imports internal
|
3
4
|
from rpa_suite.functions._printer import error_print, success_print
|
4
5
|
|
6
|
+
# imports third-party
|
7
|
+
import re
|
8
|
+
|
9
|
+
|
5
10
|
class Regex():
|
6
11
|
"""
|
7
12
|
Class that provides utilities for working with regular expressions.
|
rpa_suite/core/validate.py
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
-
# /
|
1
|
+
# rpa_suite/functions/__create_ss_dir.py
|
2
2
|
|
3
|
+
# imports internal
|
4
|
+
from rpa_suite.functions._printer import error_print, alert_print, success_print
|
5
|
+
|
6
|
+
# imports third-party
|
3
7
|
import os
|
4
8
|
from typing import Union
|
5
|
-
|
9
|
+
|
6
10
|
|
7
11
|
|
8
12
|
def __create_ss_dir(path_to_create: str = 'default', name_ss_dir: str='screenshots') -> dict[str, Union[bool, str, None]]:
|
rpa_suite/functions/_printer.py
CHANGED
rpa_suite/suite.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# rpa_suite/suite.py
|
2
2
|
|
3
|
+
# imports internal
|
3
4
|
from .core.clock import Clock
|
4
5
|
from .core.date import Date
|
5
6
|
from .core.email import Email
|
@@ -9,13 +10,20 @@ from .core.log import Log
|
|
9
10
|
from .core.print import Print
|
10
11
|
from .core.regex import Regex
|
11
12
|
from .core.validate import Validate
|
13
|
+
from .core.parallel import ParallelRunner
|
12
14
|
|
15
|
+
|
16
|
+
# imports external
|
13
17
|
from colorama import Fore
|
18
|
+
import pkg_resources
|
14
19
|
|
20
|
+
# imports third-party
|
15
21
|
import subprocess
|
16
22
|
import sys
|
17
23
|
import hashlib
|
18
24
|
|
25
|
+
|
26
|
+
|
19
27
|
# Windows bash colors
|
20
28
|
class Colors():
|
21
29
|
|
@@ -68,6 +76,7 @@ class Colors():
|
|
68
76
|
call_fn = f'{Fore.LIGHTMAGENTA_EX}'
|
69
77
|
retur_fn = f'{Fore.LIGHTYELLOW_EX}'
|
70
78
|
|
79
|
+
|
71
80
|
class Suite():
|
72
81
|
|
73
82
|
"""
|
@@ -138,15 +147,29 @@ class Suite():
|
|
138
147
|
printer: Print = Print()
|
139
148
|
regex: Regex = Regex()
|
140
149
|
validate: Validate = Validate()
|
141
|
-
|
150
|
+
Parallel: ParallelRunner = ParallelRunner
|
151
|
+
|
152
|
+
# On this case, we are importing the Browser class only if the selenium and webdriver_manager modules are installed.
|
153
|
+
# This is useful to avoid unnecessary imports and dependencies if the user does not need the Browser functionality.
|
154
|
+
import importlib.util
|
155
|
+
|
156
|
+
# from .browser import Browser
|
157
|
+
if importlib.util.find_spec("selenium") and importlib.util.find_spec("webdriver_manager"):
|
158
|
+
from .core.browser import Browser
|
159
|
+
browser: Browser = Browser
|
142
160
|
|
143
161
|
|
144
162
|
# VARIABLES INTERNAL
|
145
|
-
|
163
|
+
try:
|
164
|
+
__version__ = pkg_resources.get_distribution("rpa_suite").version
|
165
|
+
except Exception:
|
166
|
+
__version__ = 'unknown'
|
167
|
+
|
146
168
|
__id_hash__ = 'rpa_suite'
|
147
169
|
|
148
170
|
|
149
171
|
def __init__(self):
|
172
|
+
self.__id_hash__ = 'rpa_suite'
|
150
173
|
self.__id_hash__ = hashlib.sha256(self.__version__.encode()).hexdigest()
|
151
174
|
|
152
175
|
def success_print(self,
|
rpa_suite/utils/__init__.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# rpa_suite/utils/__init__.py
|
2
|
+
|
2
3
|
"""
|
3
4
|
The utils module of the rpa-suite provides a collection of utility functions and classes that facilitate various tasks in process automation. It includes helper methods for logging, file handling, and other common operations that enhance the functionality and usability of the RPA Suite.
|
4
5
|
|
rpa_suite/utils/system.py
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
+
# rpa_suite/utils/system.py
|
2
|
+
|
3
|
+
# imports internal
|
1
4
|
from rpa_suite.functions._printer import error_print, success_print
|
5
|
+
|
6
|
+
# imports third-party
|
2
7
|
import sys, os
|
3
8
|
|
9
|
+
|
4
10
|
def set_importable_dir(display_message: bool = False):
|
11
|
+
|
5
12
|
"""
|
6
13
|
Sets the directory to be importable by appending it to the system path.
|
7
14
|
|
@@ -25,9 +32,11 @@ def set_importable_dir(display_message: bool = False):
|
|
25
32
|
----------
|
26
33
|
Nenhum
|
27
34
|
"""
|
35
|
+
|
28
36
|
try:
|
29
37
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
30
38
|
|
31
39
|
if display_message: success_print(f'Successfully set the directory for importation!')
|
40
|
+
|
32
41
|
except Exception as e:
|
33
|
-
error_print(f'An error occurred while executing the function: {set_importable_dir.__name__}! Error: {str(e)}.')
|
42
|
+
error_print(f'An error occurred while executing the function: {set_importable_dir.__name__}! Error: {str(e)}.')
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: rpa_suite
|
3
|
-
Version: 1.4.
|
3
|
+
Version: 1.4.8
|
4
4
|
Summary: Conjunto de ferramentas essenciais para Automação RPA com Python, que facilitam o dia a dia de desenvolvimento.
|
5
5
|
Author: Camilo Costa de Carvalho
|
6
6
|
Author-email: camilo.carvalho@triasoftware.com.br
|
@@ -26,6 +26,7 @@ Requires-Dist: typing
|
|
26
26
|
Requires-Dist: pillow
|
27
27
|
Requires-Dist: pyautogui
|
28
28
|
Requires-Dist: requests
|
29
|
+
Requires-Dist: setuptools
|
29
30
|
Dynamic: author
|
30
31
|
Dynamic: author-email
|
31
32
|
Dynamic: classifier
|
@@ -64,7 +65,7 @@ Dynamic: summary
|
|
64
65
|
- [Dependências](#dependências)
|
65
66
|
- [Estrutura do módulo](#estrutura-do-módulo)
|
66
67
|
- [Release](#release)
|
67
|
-
- [Notas da atualização: 1.4.
|
68
|
+
- [Notas da atualização: 1.4.8](#notas-da-atualização-148)
|
68
69
|
- [Mais Sobre](#mais-sobre)
|
69
70
|
|
70
71
|
## Destaque
|
@@ -169,23 +170,29 @@ No caso da função de screenshot é necessario ter as libs 'pyautogui' 'pillow'
|
|
169
170
|
O módulo principal do rpa-suite é dividido em categorias. Cada categoria contém módulos com funções destinadas a categoria:
|
170
171
|
|
171
172
|
- **rpa_suite**
|
173
|
+
|
172
174
|
- **clock**
|
173
175
|
- **exec_at_hour** - Função que executa uma função no horário especificado "xx:yy", permitindo agendamento de tarefas com precisão.
|
174
176
|
- **wait_for_exec** - Função que aguarda um tempo em segundos antes de executar a função passada como argumento.
|
175
177
|
- **exec_and_wait** - Função que executa uma função e, em seguida, aguarda um tempo em segundos antes de continuar.
|
178
|
+
|
176
179
|
- **date**
|
177
180
|
- **get_hms** - Função que retorna hora, minuto e segundo formatados como strings.
|
178
181
|
- **get_dmy** - Função que retorna dia, mês e ano formatados como strings.
|
182
|
+
|
179
183
|
- **email**
|
180
184
|
- **send_smtp** - Função para envio de emails via SMTP com suporte a anexos e mensagens HTML, configurável e personalizável.
|
185
|
+
|
181
186
|
- **file**
|
182
187
|
- **screen_shot** - Função para capturar screenshots, criando diretórios e arquivos com nomes e caminhos personalizáveis.
|
183
188
|
- **flag_create** - Função para criar arquivos de flag indicando execução de processos.
|
184
189
|
- **flag_delete** - Função para deletar arquivos de flag após a execução de processos.
|
185
190
|
- **count_files** - Função para contar arquivos em diretórios, com suporte a extensões específicas.
|
191
|
+
|
186
192
|
- **directory**
|
187
193
|
- **create_temp_dir** - Função para criar diretórios temporários com nomes e caminhos personalizáveis.
|
188
194
|
- **delete_temp_dir** - Função para deletar diretórios temporários, com opção de remover arquivos contidos.
|
195
|
+
|
189
196
|
- **log**
|
190
197
|
- **config_logger** - Função para configurar logs com suporte a arquivos e streams, utilizando a biblioteca Loguru.
|
191
198
|
- **log_start_run_debug** - Função para registrar logs de início de execução em nível de depuração.
|
@@ -194,6 +201,7 @@ O módulo principal do rpa-suite é dividido em categorias. Cada categoria cont
|
|
194
201
|
- **log_warning** - Função para registrar logs em nível de aviso.
|
195
202
|
- **log_error** - Função para registrar logs em nível de erro.
|
196
203
|
- **log_critical** - Função para registrar logs em nível crítico.
|
204
|
+
|
197
205
|
- **printer**
|
198
206
|
- **success_print** - Função para imprimir mensagens de sucesso com destaque em verde.
|
199
207
|
- **alert_print** - Função para imprimir mensagens de alerta com destaque em amarelo.
|
@@ -201,18 +209,26 @@ O módulo principal do rpa-suite é dividido em categorias. Cada categoria cont
|
|
201
209
|
- **error_print** - Função para imprimir mensagens de erro com destaque em vermelho.
|
202
210
|
- **regex**
|
203
211
|
- **check_pattern_in_text** - Função para verificar a presença de padrões em textos, com suporte a case-sensitive.
|
212
|
+
|
204
213
|
- **validate**
|
205
214
|
- **emails** - Função para validar listas de emails, retornando listas de emails válidos e inválidos.
|
206
215
|
- **word** - Função para buscar palavras ou padrões específicos em textos, com suporte a contagem de ocorrências.
|
216
|
+
|
207
217
|
- **browser**
|
208
218
|
- **start_browser** - Função para iniciar o navegador Chrome com suporte a depuração remota.
|
209
219
|
- **find_ele** - Função para localizar elementos na página utilizando estratégias de localização do Selenium.
|
210
220
|
- **get** - Função para navegar para URLs específicas.
|
211
221
|
- **close_browser** - Função para fechar o navegador e encerrar processos relacionados.
|
212
222
|
|
223
|
+
- **parallel**
|
224
|
+
- **run** - Função para iniciar um processo em paralelo.
|
225
|
+
- **is_running** - Função para capturar o status atual do processo que esta rodando em paralelo.
|
226
|
+
- **get_result** - Função para coletar o retorno da execução em paralelo junto com resultado da função ou funções que foram enviadas a este processo com retorno em forma de dict.
|
227
|
+
- **terminate** - Função para finalizar o processo paralelo mantendo apenas o processo principal do seu código, também é chamada de forma automatica esta função ao final de um procesos paralelo ou no final da função "get_result".
|
228
|
+
|
213
229
|
## Release
|
214
230
|
|
215
|
-
Versão: **Beta 1.4.
|
231
|
+
Versão: **Beta 1.4.8**
|
216
232
|
|
217
233
|
Lançamento: *20/02/2024*
|
218
234
|
|
@@ -220,10 +236,11 @@ Lançamento: *20/02/2024*
|
|
220
236
|
|
221
237
|
Status: Em desenvolvimento.
|
222
238
|
|
223
|
-
### Notas da atualização: 1.4.
|
239
|
+
### Notas da atualização: 1.4.8
|
224
240
|
|
225
241
|
- Mudança dos submodulos para Objetos, agora Rpa_suite é um Objeto de Suite que compoe diversos sub-objetos separados pelas mesmas categorias anteriormente ja definidas
|
226
242
|
- Reformulada a arquitetura do projeto para melhor coeção e menos subpastas e arquivos, agora a estrutura é mais simples e de melhor manutenção contendo apenas uma pasta core para o nucleo de nossos modulos, e uma pasta utils com ferramentas utilitarias que vamos adicionar varias novidades
|
243
|
+
- Adicionado SubModulo Parallel com função dedicada a rodar um processo em paralelo com seu fluxo principal podendo recuperar o resultado da execução em paralelo a qualquer momento e setando timeout ou deixando o tempo indefinido para aguardar a resposta.
|
227
244
|
- Adicionado setor utils com funcionalidade de tornar o diretorio atual em um importavel relativo para o python
|
228
245
|
- Adicionado Automação de Navegadores! Sim estamos devendo esta feature a bastante tempo, porem estamos com a primeira versão disponivel, em breve teremos mais recursos e disponibilidade para outros navegadores, atualmente suporte apenas para *Chrome.*
|
229
246
|
- Mantemos o alerta! **get_dma** atualizada e **renomeada** para **get_dmy** para manter o padrão em ingles
|
@@ -0,0 +1,24 @@
|
|
1
|
+
rpa_suite/__init__.py,sha256=KO6GC2XbZUO56SAOgKxIkycHFEy6oeWPSswd8-B5IP4,2562
|
2
|
+
rpa_suite/suite.py,sha256=4aKwFsIz4YuDuKD41o2ws5bRkmt11uDblymCarYHHUw,11110
|
3
|
+
rpa_suite/core/__init__.py,sha256=27hq1brv83Kf89xtk-VVQx2etUWWBnVoZMgbgKI7Ac0,1678
|
4
|
+
rpa_suite/core/browser.py,sha256=XgUoOc6pcFwnSQxSlcOF0x8JjlUmj7gw3OvSJ_EoQns,14757
|
5
|
+
rpa_suite/core/clock.py,sha256=-ZEEaTYzwoYk9Bw1K6K1RN4s7O21uEhTg2hgBmdYLtQ,13880
|
6
|
+
rpa_suite/core/date.py,sha256=4T8_JKWBcYh4klQBAYx4RrmsKqz7uUb8wD5UtgCueeg,6629
|
7
|
+
rpa_suite/core/dir.py,sha256=sc_mJGrjo520cmNyC_HZo3YKEbORkBDfD3bCLaQ7U2o,9855
|
8
|
+
rpa_suite/core/email.py,sha256=CUqhW8-BF0XS7vFeZieQ13VywEg1TQZVoicEexSQCPE,8671
|
9
|
+
rpa_suite/core/file.py,sha256=9Psho6n9eqfLu3aA3XW43LzXefEJnAgIentFyopOpxQ,11623
|
10
|
+
rpa_suite/core/log.py,sha256=7VTPKXzVkWMg1W5bBO6BM3XDihKqNOcB4D-d6ytDbts,5631
|
11
|
+
rpa_suite/core/parallel.py,sha256=Pftz5cC-3jJLlprLjjSYadc6A9omBBmziCmeUcvNKh4,7668
|
12
|
+
rpa_suite/core/print.py,sha256=jhCNdid67dtVE6cCgRnWjqUrmsJcAr1hN38MHVupgfo,6423
|
13
|
+
rpa_suite/core/regex.py,sha256=gh3dlV29chepdoaWsl5yW9Db6MHQTGJeWstm0mD9zKU,3377
|
14
|
+
rpa_suite/core/validate.py,sha256=vKpl4u7f8CM30e_1rS6sqUqePy0ga51HHGn1cgent1o,11032
|
15
|
+
rpa_suite/functions/__create_ss_dir.py,sha256=FWLglWEYFCZUd_t-Peph1_ktfoH0fskkcfwxgU_pyks,3444
|
16
|
+
rpa_suite/functions/__init__.py,sha256=aa0jejVvnghufR50owKcKpmYit7XVAliyN9gn9JkdLE,33
|
17
|
+
rpa_suite/functions/_printer.py,sha256=51Xbqr0Ck7HHOrhJCxhMxdCKrF_kQ5AsKZN5SZQPwpk,3991
|
18
|
+
rpa_suite/utils/__init__.py,sha256=RQ-m9QNbaByek25moxx9ajpuxjPAEdjoMu69ReLBCWY,675
|
19
|
+
rpa_suite/utils/system.py,sha256=fQ9BAWxVETrFUeZJlfhN3cLzToU3XDQYqvDS9W0hWgY,1157
|
20
|
+
rpa_suite-1.4.8.dist-info/licenses/LICENSE,sha256=5D8PIbs31iGd9i1_MDNg4SzaQnp9sEIULALh2y3WyMI,1102
|
21
|
+
rpa_suite-1.4.8.dist-info/METADATA,sha256=N6Yo_DNSgM__jAR4X1SUULETkDQZRSnG-bcciOxkOXQ,12769
|
22
|
+
rpa_suite-1.4.8.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
23
|
+
rpa_suite-1.4.8.dist-info/top_level.txt,sha256=HYkDtg-kJNAr3F2XAIPyJ-QBbNhk7q6jrqsFt10lz4Y,10
|
24
|
+
rpa_suite-1.4.8.dist-info/RECORD,,
|
@@ -1,83 +0,0 @@
|
|
1
|
-
# /_create_log_dir.py
|
2
|
-
|
3
|
-
import os
|
4
|
-
from typing import Union
|
5
|
-
from rpa_suite.functions._printer import error_print, alert_print, success_print
|
6
|
-
|
7
|
-
|
8
|
-
def _create_log_dir(path_to_create: str = 'default', name_log_dir: str='logs') -> dict[str, Union[bool, str, None]]:
|
9
|
-
|
10
|
-
"""
|
11
|
-
Function responsible for creating a logger directory to work with files ``.log``. \n
|
12
|
-
|
13
|
-
Parameters:
|
14
|
-
----------
|
15
|
-
``path_to_create: str`` - should be a string with the full path pointing to the folder where the logger folder should be created, if it is empty the ``default`` value will be used which will create a folder in the current directory where the file containing this function was called.
|
16
|
-
|
17
|
-
``name_log_dir: str`` - should be a string representing the name of the logger directory to be created. If it is empty, the ``temp`` value will be used as the default directory name.
|
18
|
-
|
19
|
-
Return:
|
20
|
-
----------
|
21
|
-
>>> type:dict
|
22
|
-
* 'success': bool - represents case the action was performed successfully
|
23
|
-
* 'path_created': str - path of the directory that was created on the process
|
24
|
-
|
25
|
-
Description: pt-br
|
26
|
-
----------
|
27
|
-
Função responsavel por criar diretório de logger para trabalhar com arquivos de log. \n
|
28
|
-
|
29
|
-
Parametros:
|
30
|
-
----------
|
31
|
-
``path_to_create: str`` - deve ser uma string com o path completo apontando para a pasta onde deve ser criada a pasta temporaria, se estiver vazio sera usado valor ``default`` que criará pasta no diretório atual onde o arquivo contendo esta função foi chamada.
|
32
|
-
|
33
|
-
``name_log_dir: str`` - deve ser uma string representando o nome do diretório de logger a ser criado. Se estiver vazio, o valor ``temp`` será usado como o nome padrão do diretório.
|
34
|
-
|
35
|
-
Retorno:
|
36
|
-
----------
|
37
|
-
>>> type:dict
|
38
|
-
* 'success': bool - representa se ação foi realizada com sucesso
|
39
|
-
* 'path_created': str - path do diretório que foi criado no processo
|
40
|
-
"""
|
41
|
-
|
42
|
-
# Local Variables
|
43
|
-
result: dict = {
|
44
|
-
'success': bool,
|
45
|
-
'path_created': str,
|
46
|
-
}
|
47
|
-
|
48
|
-
try:
|
49
|
-
# by 'default', defines path to local script execution path
|
50
|
-
if path_to_create == 'default':
|
51
|
-
path_to_create: str = os.getcwd()
|
52
|
-
|
53
|
-
# Build path to new dir
|
54
|
-
full_path: str = os.path.join(path_to_create, name_log_dir)
|
55
|
-
|
56
|
-
# Create dir in this block
|
57
|
-
try:
|
58
|
-
|
59
|
-
# Successefully created
|
60
|
-
os.makedirs(full_path, exist_ok=False)
|
61
|
-
|
62
|
-
result['success'] = True
|
63
|
-
result['path_created'] = fr'{full_path}'
|
64
|
-
|
65
|
-
success_print(f"Diretório:'{full_path}' foi criado com sucesso.")
|
66
|
-
|
67
|
-
except FileExistsError:
|
68
|
-
result['success'] = False
|
69
|
-
result['path_created'] = full_path
|
70
|
-
# alert_print(f"Diretório:'{full_path}' já existe.")
|
71
|
-
|
72
|
-
except PermissionError:
|
73
|
-
result['success'] = False
|
74
|
-
result['path_created'] = None
|
75
|
-
alert_print(f"Permissão negada: não é possível criar o diretório '{full_path}'.")
|
76
|
-
|
77
|
-
except Exception as e:
|
78
|
-
result['success'] = False
|
79
|
-
result['path_created'] = None
|
80
|
-
error_print(f'Error capturing current path to create logger directory! Error: {str(e)}')
|
81
|
-
|
82
|
-
finally:
|
83
|
-
return result
|
@@ -1,96 +0,0 @@
|
|
1
|
-
# /_functions_logger.py
|
2
|
-
|
3
|
-
import logging
|
4
|
-
from ._logger import file_handler
|
5
|
-
from rpa_suite.functions._printer import error_print, success_print
|
6
|
-
|
7
|
-
|
8
|
-
def log_start_run_debug(msg_start_loggin: str) -> None: # represent start application
|
9
|
-
|
10
|
-
"""
|
11
|
-
Function responsable to generate ``start run log level debug``, in file and print on terminal the same log captured on this call.
|
12
|
-
"""
|
13
|
-
|
14
|
-
try:
|
15
|
-
global file_handler
|
16
|
-
file_handler.stream.write(f'\n{msg_start_loggin}\n')
|
17
|
-
success_print(f'{msg_start_loggin}')
|
18
|
-
|
19
|
-
except Exception as e:
|
20
|
-
error_print(f'Erro durante a função: {log_start_run_debug.__name__}! Error: {str(e)}')
|
21
|
-
|
22
|
-
|
23
|
-
def log_debug(msg) -> None:
|
24
|
-
|
25
|
-
"""
|
26
|
-
Function responsable to generate log level ``debug``, in file and print on terminal the same log captured on this call.
|
27
|
-
"""
|
28
|
-
|
29
|
-
try:
|
30
|
-
logging.debug(msg)
|
31
|
-
|
32
|
-
except Exception as e:
|
33
|
-
error_print(f'Erro durante a função: {log_debug.__name__}! Error: {str(e)}')
|
34
|
-
|
35
|
-
def log_info(msg) -> None:
|
36
|
-
|
37
|
-
"""
|
38
|
-
Function responsable to generate log level ``info``, in file and print on terminal the same log captured on this call.
|
39
|
-
"""
|
40
|
-
|
41
|
-
try:
|
42
|
-
logging.info(msg)
|
43
|
-
|
44
|
-
except Exception as e:
|
45
|
-
error_print(f'Erro durante a função: {log_debug.__name__}! Error: {str(e)}')
|
46
|
-
|
47
|
-
def log_info(msg) -> None:
|
48
|
-
|
49
|
-
"""
|
50
|
-
Function responsable to generate log level ``info``, in file and print on terminal the same log captured on this call.
|
51
|
-
"""
|
52
|
-
|
53
|
-
try:
|
54
|
-
logging.info(msg)
|
55
|
-
|
56
|
-
except Exception as e:
|
57
|
-
error_print(f'Erro durante a função: {log_info.__name__}! Error: {str(e)}')
|
58
|
-
|
59
|
-
|
60
|
-
def log_warning(msg) -> None:
|
61
|
-
|
62
|
-
"""
|
63
|
-
Function responsable to generate log level ``warning``, in file and print on terminal the same log captured on this call.
|
64
|
-
"""
|
65
|
-
|
66
|
-
try:
|
67
|
-
logging.warning(msg)
|
68
|
-
|
69
|
-
except Exception as e:
|
70
|
-
error_print(f'Erro durante a função: {log_warning.__name__}! Error: {str(e)}')
|
71
|
-
|
72
|
-
|
73
|
-
def log_error(msg) -> None:
|
74
|
-
|
75
|
-
"""
|
76
|
-
Function responsable to generate log level ``error``, in file and print on terminal the same log captured on this call.
|
77
|
-
"""
|
78
|
-
|
79
|
-
try:
|
80
|
-
logging.error(msg)
|
81
|
-
|
82
|
-
except Exception as e:
|
83
|
-
error_print(f'Erro durante a função: {log_error.__name__}! Error: {str(e)}')
|
84
|
-
|
85
|
-
|
86
|
-
def log_critical(msg) -> None:
|
87
|
-
|
88
|
-
"""
|
89
|
-
Function responsable to generate log level ``critical``, in file and print on terminal the same log captured on this call.
|
90
|
-
"""
|
91
|
-
|
92
|
-
try:
|
93
|
-
logging.critical(msg)
|
94
|
-
|
95
|
-
except Exception as e:
|
96
|
-
error_print(f'Erro durante a função: {log_critical.__name__}! Error: {str(e)}')
|
rpa_suite/functions/_logger.py
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
# /_logger.py
|
2
|
-
|
3
|
-
import logging
|
4
|
-
from logging import DEBUG
|
5
|
-
from logging import FileHandler, StreamHandler, Filter
|
6
|
-
from colorlog import ColoredFormatter
|
7
|
-
from typing import Optional as Op
|
8
|
-
from ._variables import file_handler, stream_handler
|
9
|
-
from .__create_log_dir import _create_log_dir
|
10
|
-
from rpa_suite.functions._printer import error_print
|
11
|
-
|
12
|
-
|
13
|
-
class Filters(Filter):
|
14
|
-
|
15
|
-
word_filter: Op[list[str]]
|
16
|
-
|
17
|
-
def filter(self, record):
|
18
|
-
|
19
|
-
if len(self.word_filter) > 0:
|
20
|
-
|
21
|
-
for words in self.word_filter:
|
22
|
-
|
23
|
-
|
24
|
-
string_words: list[str] = [str(word) for word in words]
|
25
|
-
"""print(words)
|
26
|
-
print(type(words))
|
27
|
-
print(string_words)
|
28
|
-
print(type(string_words))
|
29
|
-
input()"""
|
30
|
-
for word in string_words:
|
31
|
-
if word in record.msg:
|
32
|
-
record.msg = 'Log Alterado devido a palavra Filtrada!'
|
33
|
-
return True
|
34
|
-
|
35
|
-
return True
|
36
|
-
|
37
|
-
|
38
|
-
def config_logger(name_app:str = 'Logger', path_dir:str = None, name_log_dir:str = None, name_file_log: str = 'log', use_default_path_and_name: bool = True, filter_words: list[str] = None) -> Op[FileHandler]:
|
39
|
-
|
40
|
-
"""
|
41
|
-
Function responsible for create a object logger with fileHandler and streamHandler
|
42
|
-
"""
|
43
|
-
|
44
|
-
global file_handler, stream_handler
|
45
|
-
|
46
|
-
try:
|
47
|
-
|
48
|
-
|
49
|
-
if not use_default_path_and_name:
|
50
|
-
result_tryed: dict = _create_log_dir(path_dir, name_log_dir)
|
51
|
-
path_dir = result_tryed['path_created']
|
52
|
-
else:
|
53
|
-
if path_dir == None and name_log_dir == None:
|
54
|
-
result_tryed: dict = _create_log_dir()
|
55
|
-
path_dir = result_tryed['path_created']
|
56
|
-
|
57
|
-
|
58
|
-
# configuração de objetos logger
|
59
|
-
file_handler = FileHandler(
|
60
|
-
filename=fr'{path_dir}\{name_file_log}.log',
|
61
|
-
mode='a',
|
62
|
-
encoding='utf-8'
|
63
|
-
)
|
64
|
-
stream_handler = StreamHandler()
|
65
|
-
|
66
|
-
# Crie um formatador
|
67
|
-
formatter = ColoredFormatter(
|
68
|
-
"%(log_color)s%(levelname)s ->%(reset)s %(log_color)s%(message)s%(reset)s",
|
69
|
-
datefmt=None,
|
70
|
-
reset=True,
|
71
|
-
log_colors={
|
72
|
-
'DEBUG': 'cyan',
|
73
|
-
'INFO': 'green',
|
74
|
-
'WARNING': 'yellow',
|
75
|
-
'ERROR': 'red',
|
76
|
-
'CRITICAL': 'red',
|
77
|
-
},
|
78
|
-
force_color=True
|
79
|
-
)
|
80
|
-
stream_handler.setFormatter(formatter)
|
81
|
-
|
82
|
-
# ATRIBUIÇÕES
|
83
|
-
new_filter: Op[Filters] = None
|
84
|
-
if filter_words is not None:
|
85
|
-
new_filter: Filters = Filters()
|
86
|
-
new_filter.word_filter = [filter_words]
|
87
|
-
|
88
|
-
if new_filter is not None:
|
89
|
-
file_handler.addFilter(new_filter)
|
90
|
-
|
91
|
-
file_handler.setLevel(DEBUG)
|
92
|
-
|
93
|
-
# Obtenha o logger
|
94
|
-
logger = logging.getLogger(__name__)
|
95
|
-
|
96
|
-
# Adicione o manipulador de stream ao logger
|
97
|
-
logger.addHandler(stream_handler)
|
98
|
-
|
99
|
-
# terminando de inplementar configuração para o logger
|
100
|
-
FORMAT = '%(levelname)s!%(asctime)s: %(message)s'
|
101
|
-
logging.basicConfig(
|
102
|
-
level=DEBUG, # level from stream_handler
|
103
|
-
#format='%(levelname)s - %(asctime)s - %(message)s',
|
104
|
-
format=FORMAT,
|
105
|
-
handlers=[file_handler, stream_handler],
|
106
|
-
datefmt='%d.%m.%y %H:%M',
|
107
|
-
)
|
108
|
-
return file_handler
|
109
|
-
|
110
|
-
except Exception as e:
|
111
|
-
|
112
|
-
error_print(f'Houve um erro durante a execução da função: {config_logger.__name__}! Error: {str(e)}.')
|
113
|
-
return None
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# /_variables.py
|
2
|
-
|
3
|
-
from logging import FileHandler, StreamHandler
|
4
|
-
from typing import Optional
|
5
|
-
|
6
|
-
# Variável global para o manipulador de arquivo
|
7
|
-
file_handler: Optional[FileHandler] = None
|
8
|
-
|
9
|
-
# Variável global para o manipulador de stream stdout/stdin/buffer
|
10
|
-
stream_handler: Optional[StreamHandler] = None
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# /_variables_uru.py
|
2
|
-
|
3
|
-
from loguru import logger
|
4
|
-
from typing import Optional
|
5
|
-
from typing import Any
|
6
|
-
|
7
|
-
# Variável global para o manipulador de arquivo
|
8
|
-
file_handler: Optional[str] = None
|
9
|
-
|
10
|
-
# Variável global para o manipulador de stream stdout/stdin/buffer
|
11
|
-
stream_handler: Optional[Any] = logger
|
rpa_suite-1.4.6.dist-info/RECORD
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
rpa_suite/__init__.py,sha256=A6Y1CmdmN9ADAgmvhS8FNXmLNP5fQuyUuZBTm9AKdQo,2494
|
2
|
-
rpa_suite/suite.py,sha256=pCbceWTf9WM_xt0GSf_k7Xnk4w_qHKS1hLscYqV5Ga0,10280
|
3
|
-
rpa_suite/core/__init__.py,sha256=TJ-WlsgWTVQ-jc-n66K5ZrqJJeHfI27jXytQVcVHN3M,1640
|
4
|
-
rpa_suite/core/browser.py,sha256=E-yD2LgwaDVOwUBs09BBXQVx5tLZ7DMFee8LYvgLClY,14682
|
5
|
-
rpa_suite/core/clock.py,sha256=1QnlOLs9YCRIq-tMFfk9OgaoicKtCL9sBzJmJmz9m_w,13808
|
6
|
-
rpa_suite/core/date.py,sha256=PBU999Acxiwoep029ElqKSzK6T4DrF3eIP-LB_J-BbM,6568
|
7
|
-
rpa_suite/core/dir.py,sha256=y6YDyRYQdf9Bj0z3Gs6ugNZ0tKWYgWdDI5R5BjjRIEY,9783
|
8
|
-
rpa_suite/core/email.py,sha256=kQJAc6Nb9y7jo-oBAo8X1EZS2y-_gTJRoRc9ylS04CE,8675
|
9
|
-
rpa_suite/core/file.py,sha256=rgvXqq_uV3D5wsioL4kTy0cbKv0bNO35alSVup6veHk,11524
|
10
|
-
rpa_suite/core/log.py,sha256=xCAoXLxnG2bVzXIafULvW45I4-ljo296E4auU1CppYY,5537
|
11
|
-
rpa_suite/core/print.py,sha256=tLHIKo6LDTrV91gWKvwlTrxb1idgx3EV_fIRkqtzWBM,6389
|
12
|
-
rpa_suite/core/regex.py,sha256=wsTxe8-baKul2Fv1-fycXZ-DVa5krhkc9qMkP04giGs,3303
|
13
|
-
rpa_suite/core/validate.py,sha256=0HnCUgT19LPBMhKxIV_hOAoixpqM7TAL9EkC0S56DFc,10976
|
14
|
-
rpa_suite/functions/__create_log_dir.py,sha256=-NjH3Mwv8Aa0EgZiD_TcdlSKbsoYl5EoYmPclFwjTKY,3325
|
15
|
-
rpa_suite/functions/__create_ss_dir.py,sha256=WMuDDTxM5xWudQjftC7xPr6y3IdiXjVK-GfxkQNIo4c,3377
|
16
|
-
rpa_suite/functions/__init__.py,sha256=aa0jejVvnghufR50owKcKpmYit7XVAliyN9gn9JkdLE,33
|
17
|
-
rpa_suite/functions/_functions_logger.py,sha256=hlYDEUsmmfwaPlY_YQeNQEFeT_mryHBqgBVyRdxge48,2703
|
18
|
-
rpa_suite/functions/_logger.py,sha256=gTYO9JlbX5_jDfu_4FTTajJw3_GotE2BHUbDDB1Hf5g,3643
|
19
|
-
rpa_suite/functions/_printer.py,sha256=r72zeobAi2baVbYgbfFH0h5-WMv4tSDGPNlcpZen7O0,3949
|
20
|
-
rpa_suite/functions/_variables.py,sha256=vCcktifFUriBQTyUaayZW8BlE8Gr7VP-tFbfomKOS5U,312
|
21
|
-
rpa_suite/functions/_variables_uru.py,sha256=xRqYp49l1fFNrHczOmJ6Pqw1PKIWs0f9kxlgvuYGYys,303
|
22
|
-
rpa_suite/utils/__init__.py,sha256=f0qiYRZ7VzBarp1yNj91V0UMZG9QY2mgDXEbWvNZDYs,673
|
23
|
-
rpa_suite/utils/system.py,sha256=JIONQutSbNBkQIATcN1wC0NUE4ILlgVZ-TOnuoMPxHI,1055
|
24
|
-
rpa_suite-1.4.6.dist-info/licenses/LICENSE,sha256=5D8PIbs31iGd9i1_MDNg4SzaQnp9sEIULALh2y3WyMI,1102
|
25
|
-
rpa_suite-1.4.6.dist-info/METADATA,sha256=N-wf425WMZNyO6PcTVXcHboPh97H4dZNaAgjfijqplI,11828
|
26
|
-
rpa_suite-1.4.6.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
27
|
-
rpa_suite-1.4.6.dist-info/top_level.txt,sha256=HYkDtg-kJNAr3F2XAIPyJ-QBbNhk7q6jrqsFt10lz4Y,10
|
28
|
-
rpa_suite-1.4.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|