rpa-suite 1.4.5__py3-none-any.whl → 1.4.6__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 CHANGED
@@ -26,7 +26,7 @@
26
26
  ``printer``: Functions for formatted output
27
27
  ``regex``: Operations with regular expressions
28
28
  ``validate``: Data validation functions
29
- ``Browser``: Object Browser automation functions
29
+ ``Browser``: Object Browser automation functions (neeeds Selenium and Webdriver_Manager)
30
30
 
31
31
  pt-br
32
32
  -----
@@ -56,7 +56,7 @@
56
56
  ``printer``: Funções para output formatado
57
57
  ``regex``: Operações com expressões regulares
58
58
  ``validate``: Funções de validação de dados
59
- ``Browser``: Objeto de Automação de Navegadores
59
+ ``Browser``: Objeto de Automação de Navegadores (necessario Selenium e Webdriver_Manager)
60
60
  """
61
61
 
62
62
  from .suite import rpa
@@ -3,9 +3,12 @@
3
3
  """
4
4
  The Core module is where we can import all Sub-Objects used by the rpa_suite module separately, categorized by their respective classes based on functionality. However, we can also use them through the main rpa object using the following syntax:
5
5
  >>> from rpa_suite import rpa
6
- >>> rpa.clock.wait_for_exec()
6
+ >>> rpa.clock.wait_for_exec(foo)
7
7
  >>> rpa.file.screen_shot() ...
8
- among others.
8
+ or
9
+ >>> from rpa_suite.core.clock import Clock
10
+ >>> clock = Clock()
11
+ >>> clock.wait_for_exec()
9
12
 
10
13
  pt-br
11
14
  ----------
@@ -13,9 +16,13 @@ O módulo Core é de onde podemos importar todos os Sub-Objetos usados pelo mód
13
16
  >>> from rpa_suite import rpa
14
17
  >>> rpa.clock.wait_for_exec()
15
18
  >>> rpa.file.screen_shot() ...
16
- entre outros.
19
+ ou
20
+ >>> from rpa_suite.core.clock import Clock
21
+ >>> clock = Clock()
22
+ >>> clock.wait_for_exec(foo)
17
23
 
18
24
  """
25
+
19
26
  from .clock import Clock
20
27
  from .date import Date
21
28
  from .dir import Directory
@@ -25,4 +32,13 @@ from .log import Log
25
32
  from .print import Print
26
33
  from .regex import Regex
27
34
  from .validate import Validate
28
- from .browser import Browser
35
+
36
+
37
+
38
+ # On this case, we are importing the Browser class only if the selenium and webdriver_manager modules are installed.
39
+ # This is useful to avoid unnecessary imports and dependencies if the user does not need the Browser functionality.
40
+ import importlib.util
41
+
42
+ # from .browser import Browser
43
+ if importlib.util.find_spec("selenium") and importlib.util.find_spec("webdriver_manager"):
44
+ from .browser import Browser
rpa_suite/core/browser.py CHANGED
@@ -12,17 +12,77 @@ from selenium.webdriver.support import expected_conditions as EC
12
12
  from webdriver_manager.chrome import ChromeDriverManager
13
13
  from time import sleep
14
14
 
15
- class Browser():
16
15
 
16
+ class Browser():
17
+
17
18
  """
18
- WIP ...
19
+ Browser Object for Automation (Work in Progress)
20
+ This class provides an interface for automating browser interactions using
21
+ Google Chrome with a debugging port. It includes methods for starting,
22
+ configuring, navigating, and interacting with the browser. The implementation
23
+ is still under development and may require further enhancements.
24
+
25
+ Attributes:
26
+ driver: The WebDriver instance used to control the browser.
27
+ port (int): The debugging port used to connect to the browser. Default is 9393.
28
+ path_driver (str): The path to the ChromeDriver executable.
29
+
30
+ Methods:
31
+ __init__(port: int = 9393, close_all_chrome_on_this_port: bool = False):
32
+ Initializes the Browser object with the specified debugging port and
33
+ optionally closes all Chrome instances running on the same port.
34
+ configure_browser() -> None:
35
+ Configures the browser with debugging options and initializes the WebDriver.
36
+ start_browser(close_chrome_on_this_port: bool = True, display_message: bool = False):
37
+ Starts the Chrome browser with the specified debugging port and initializes
38
+ the WebDriver.
39
+ find_ele(value, by=By.XPATH, timeout=12, display_message=True):
40
+ Finds a single element on the page using the specified locator strategy.
41
+ get(url: str, display_message: bool = False):
42
+ Navigates the browser to the specified URL.
43
+ _close_all_chrome():
44
+ Closes all Chrome processes forcefully.
45
+ close_browser(display_message: bool = False):
46
+ Closes the browser instance and terminates the associated Chrome processes.
47
+
48
+ pt-br
49
+ ----------
50
+ Objeto Browser para Automação (Em Desenvolvimento)
51
+ Esta classe fornece uma interface para automação de interações com o navegador
52
+ Google Chrome utilizando uma porta de depuração. Inclui métodos para iniciar,
53
+ configurar, navegar e interagir com o navegador. A implementação ainda está em
54
+ desenvolvimento e pode requerer melhorias adicionais.
55
+
56
+ Atributos:
57
+ driver: A instância do WebDriver usada para controlar o navegador.
58
+ port (int): A porta de depuração usada para conectar ao navegador. O padrão é 9393.
59
+ path_driver (str): O caminho para o executável do ChromeDriver.
60
+
61
+ Métodos:
62
+ __init__(port: int = 9393, close_all_chrome_on_this_port: bool = False):
63
+ Inicializa o objeto Browser com a porta de depuração especificada e,
64
+ opcionalmente, fecha todas as instâncias do Chrome que estão sendo executadas
65
+ na mesma porta.
66
+ configure_browser() -> None:
67
+ Configura o navegador com opções de depuração e inicializa o WebDriver.
68
+ start_browser(close_chrome_on_this_port: bool = True, display_message: bool = False):
69
+ Inicia o navegador Chrome com a porta de depuração especificada e inicializa
70
+ o WebDriver.
71
+ find_ele(value, by=By.XPATH, timeout=12, display_message=True):
72
+ Localiza um único elemento na página usando a estratégia de localização especificada.
73
+ get(url: str, display_message: bool = False):
74
+ Navega o navegador para a URL especificada.
75
+ _close_all_chrome():
76
+ Fecha todos os processos do Chrome de forma forçada.
77
+ close_browser(display_message: bool = False):
78
+ Fecha a instância do navegador e termina os processos associados do Chrome.
19
79
  """
20
80
 
21
81
  driver: None
22
82
  port: int = None
23
83
  path_driver = None
24
84
 
25
- def __init__(self, port: int = 9393, close_all_chrome_on_this_port: bool = True):
85
+ def __init__(self, port: int = 9393, close_all_chrome_on_this_port: bool = False):
26
86
  self.port = port
27
87
  self.path_driver = ChromeDriverManager().install()
28
88
 
@@ -30,6 +90,15 @@ class Browser():
30
90
  ...
31
91
 
32
92
  def configure_browser(self) -> None:
93
+ """
94
+ Configures the browser instance with specified options and initializes the WebDriver.
95
+ This method sets up the browser with debugging options, maximized window, and disables notifications.
96
+ It also verifies the existence of the ChromeDriver executable at the specified path before creating
97
+ the WebDriver instance.
98
+ Raises:
99
+ FileNotFoundError: If the specified path to the ChromeDriver executable does not exist.
100
+ Exception: For any other errors encountered during the browser configuration process.
101
+ """
33
102
 
34
103
  try:
35
104
  # Use the absolute path from comment
@@ -57,6 +126,20 @@ class Browser():
57
126
  error_print(f'Erro durante a função: {self.configure_browser.__name__}! Error: {str(e)}.')
58
127
 
59
128
  def start_browser(self, close_chrome_on_this_port: bool = True, display_message: bool = False):
129
+ """
130
+ Starts a Chrome browser instance with remote debugging enabled.
131
+ Args:
132
+ close_chrome_on_this_port (bool): If True, closes any existing Chrome instance using the specified debugging port before starting a new one. Defaults to True.
133
+ display_message (bool): If True, displays a success message upon successfully starting the browser. Defaults to False.
134
+ Raises:
135
+ Exception: If an error occurs while starting the browser or connecting to the debugging port.
136
+ Behavior:
137
+ - Closes any existing Chrome instance on the specified debugging port if `close_chrome_on_this_port` is True.
138
+ - Launches Chrome with the specified debugging port and user data directory.
139
+ - Waits until Chrome is fully initialized and accessible via the debugging port.
140
+ - Configures the browser instance using the `configure_browser` method.
141
+ - Optionally displays a success message if `display_message` is True.
142
+ """
60
143
 
61
144
  try:
62
145
  if close_chrome_on_this_port: self.close_browser()
@@ -84,6 +167,23 @@ class Browser():
84
167
 
85
168
 
86
169
  def find_ele(self, value, by=By.XPATH, timeout=12, display_message=True):
170
+ """
171
+ Locate and return a web element on the page using the specified locator strategy.
172
+ Args:
173
+ value (str): The locator value to identify the web element.
174
+ by (selenium.webdriver.common.by.By, optional): The locator strategy to use.
175
+ Defaults to By.XPATH.
176
+ timeout (int, optional): The maximum time to wait for the element to appear, in seconds.
177
+ Defaults to 12.
178
+ display_message (bool, optional): Whether to display an error message if the element
179
+ is not found. Defaults to True.
180
+ Returns:
181
+ selenium.webdriver.remote.webelement.WebElement: The located web element if found.
182
+ None: If the element is not found or an exception occurs.
183
+ Raises:
184
+ Exception: Propagates any exception encountered during the element search if
185
+ `display_message` is set to False.
186
+ """
87
187
 
88
188
  try:
89
189
  sleep(2)
@@ -103,6 +203,14 @@ class Browser():
103
203
 
104
204
  # navigate
105
205
  def get(self, url: str, display_message: bool = False):
206
+ """
207
+ Navigates the browser to the specified URL.
208
+ Args:
209
+ url (str): The URL to navigate to.
210
+ display_message (bool, optional): If True, displays a success message upon navigation. Defaults to False.
211
+ Raises:
212
+ Exception: If an error occurs while navigating to the URL, it logs the error message.
213
+ """
106
214
 
107
215
  try:
108
216
  self.driver.get(url)
@@ -112,7 +220,14 @@ class Browser():
112
220
  error_print(f'Erro ao navegar para a URL: {url}. Error: {str(e)}.')
113
221
 
114
222
 
115
- def _close_all_chrome(self):
223
+ def _close_all_browsers(self):
224
+ """
225
+ Forcefully closes all instances of Google Chrome running on the system.
226
+ This method uses the `taskkill` command to terminate all processes with the name
227
+ "chrome.exe". Any errors during the execution of the command are silently ignored.
228
+ Note:
229
+ This method is specific to Windows operating systems and will not work on other platforms.
230
+ """
116
231
 
117
232
  try:
118
233
  os.system('taskkill /F /IM chrome.exe >nul 2>&1')
@@ -121,6 +236,24 @@ class Browser():
121
236
 
122
237
 
123
238
  def close_browser(self, display_message: bool = False):
239
+ """
240
+ Fecha o navegador controlado pelo Selenium e encerra os processos relacionados ao Chrome.
241
+ Este método tenta fechar o navegador de forma ordenada utilizando os métodos `close` e `quit` do Selenium.
242
+ Caso esses métodos falhem, ele força o encerramento do processo do Chrome associado à porta de depuração remota.
243
+ Em último caso, pode encerrar todos os processos do Chrome relacionados à porta especificada.
244
+ Args:
245
+ display_message (bool): Indica se mensagens de status devem ser exibidas durante o processo de fechamento.
246
+ Comportamento:
247
+ - Tenta fechar o navegador utilizando `self.driver.close()` e `self.driver.quit()`.
248
+ - Aguarda um momento para liberar o processo.
249
+ - Força o encerramento do processo do Chrome associado à porta de depuração remota.
250
+ - Verifica se o processo foi encerrado e tenta métodos mais agressivos, se necessário.
251
+ - Em caso de falha crítica, tenta encerrar todos os processos do Chrome relacionados à porta especificada.
252
+ Exceções:
253
+ - Captura e exibe mensagens de erro caso ocorra falha ao fechar o navegador.
254
+ Observação:
255
+ Use com cautela, especialmente o encerramento extremo, pois pode afetar outros processos do Chrome em execução.
256
+ """
124
257
 
125
258
  try:
126
259
  # Primeiro tenta fechar todas as janelas via Selenium
rpa_suite/core/file.py CHANGED
@@ -170,7 +170,7 @@ class File():
170
170
  full_path_with_name = fr'{path_to_create}/{name_file}'
171
171
 
172
172
  with open(full_path_with_name, 'w', encoding='utf-8') as file:
173
- file.write('[T-BOT Crédit Simulation] running in realtime, waiting finish to new execution')
173
+ file.write('[RPA Suite] - Running Flag File')
174
174
  if display_message: success_print("Flag file created.")
175
175
 
176
176
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rpa_suite
3
- Version: 1.4.5
3
+ Version: 1.4.6
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
@@ -25,6 +25,7 @@ Requires-Dist: loguru
25
25
  Requires-Dist: typing
26
26
  Requires-Dist: pillow
27
27
  Requires-Dist: pyautogui
28
+ Requires-Dist: requests
28
29
  Dynamic: author
29
30
  Dynamic: author-email
30
31
  Dynamic: classifier
@@ -54,13 +55,16 @@ Dynamic: summary
54
55
 
55
56
  ## Sumário do conteudo
56
57
 
58
+ - [O que é?](#o-que-é)
59
+ - [Sumário do conteudo](#sumário-do-conteudo)
57
60
  - [Destaque](#destaque)
58
61
  - [Objetivo](#objetivo)
59
62
  - [Instalação](#instalação)
60
63
  - [Exemplo](#exemplo)
61
64
  - [Dependências](#dependências)
62
65
  - [Estrutura do módulo](#estrutura-do-módulo)
63
- - [Versão do projeto](#versão-do-projeto)
66
+ - [Release](#release)
67
+ - [Notas da atualização: 1.4.6](#notas-da-atualização-146)
64
68
  - [Mais Sobre](#mais-sobre)
65
69
 
66
70
  ## Destaque
@@ -94,17 +98,17 @@ ou no conda:
94
98
  conda install -c conda-forge rpa-suite
95
99
  ```
96
100
 
97
- Após instalação basta fazer a importação do modulo e instanciar o Objeto ``suite``:
101
+ Após instalação basta fazer a importação do modulo rpa que ja tera um objeto instanciado de ``suite``:
98
102
 
99
103
  ```python
100
- from rpa_suite import suite as rpa
104
+ from rpa_suite import rpa
101
105
  ```
102
106
 
103
107
  Feito isso já estará pronto para o uso:
104
108
 
105
109
  ```python
106
110
  # function send mail by SMTP
107
- rpa.send_mail(...)
111
+ rpa.email.send_mail(...)
108
112
  ```
109
113
 
110
114
  > [!NOTE]
@@ -121,21 +125,24 @@ rpa.send_mail(...)
121
125
  > Opcionalmente você pode querer desinstalar as libs que foram inclusas no projeto, sendo assim:
122
126
 
123
127
  ```python
124
- >>> python -m pip uninstall loguru mail_validator colorama
128
+ >>> python -m pip uninstall loguru mail_validator colorama pillow pyautogui
125
129
  ```
126
130
 
127
131
  ## Exemplo
128
132
 
129
133
  Do módulo principal, importe a suite. Ela retorna uma instância do Objeto de classe Rpa_suite, onde possui variáveis apontando para todas funções dos submódulos:
130
134
 
131
- from rpa_suite import suite as rpa
135
+ from rpa_suite import rpa
132
136
 
133
- # Usando a função de envio de email por SMTP default
134
- rpa.send_email(my_email, my_pass, mail_to, subject, message_body)
137
+ # Exemplo com função de execução em horario especifico
138
+ rpa.clock.exec_at_hour('13:53', my_function, param_a, param_b)
135
139
 
136
- # Usando submódulo clock para aguardar 30 (seg) e então executar uma função
140
+ # Usando submódulo clock para aguardar 30(seg) para executar minha função
137
141
  time = 30
138
- rpa.wait_for_exec(time, my_function, param1, param2)
142
+ rpa.clock.wait_for_exec(time, my_function, param1, param2)
143
+
144
+ # Usando submódulo email para envio de email por smtp comum
145
+ rpa.email.send_smtp(...)
139
146
 
140
147
  ## Dependências
141
148
 
@@ -159,44 +166,61 @@ No caso da função de screenshot é necessario ter as libs 'pyautogui' 'pillow'
159
166
 
160
167
  ## Estrutura do módulo
161
168
 
162
- O módulo principal do rpa-suite é dividido em categorias. Cada categoria contém módulos com funções destinadas a cada tipo de tarefa
163
-
164
- ! Divisao e nomes de funções precisam ser atualizadas nesta sessão de Estrutura do módulo !
169
+ O módulo principal do rpa-suite é dividido em categorias. Cada categoria contém módulos com funções destinadas a categoria:
165
170
 
166
171
  - **rpa_suite**
167
172
  - **clock**
168
- - **waiter** - Função capaz de aguardar para executar a função do argumento, ou executar a função do argumento para aguardar posteriormente
169
- - **exec_at** - Função capaz de executar a função do argumento no horario especificado "xx:yy" parecido com scheduler, porem com a vantagem de ter o horario como variavel dentro do escopo de código podendo gerar variações pela propria natureza da aplicação
173
+ - **exec_at_hour** - Função que executa uma função no horário especificado "xx:yy", permitindo agendamento de tarefas com precisão.
174
+ - **wait_for_exec** - Função que aguarda um tempo em segundos antes de executar a função passada como argumento.
175
+ - **exec_and_wait** - Função que executa uma função e, em seguida, aguarda um tempo em segundos antes de continuar.
170
176
  - **date**
171
- - **date** - Funções capazes de extrair dia/mes/ano e hora/min/seg, facilitando a necessidade de formatar o resultado de datetime, a função ja devolve os valores em trio formatados em string
177
+ - **get_hms** - Função que retorna hora, minuto e segundo formatados como strings.
178
+ - **get_dmy** - Função que retorna dia, mês e ano formatados como strings.
172
179
  - **email**
173
- - **sender_smtp** - Funções para envio de email SMPT com configuração simples default porem personalizavel
180
+ - **send_smtp** - Função para envio de emails via SMTP com suporte a anexos e mensagens HTML, configurável e personalizável.
174
181
  - **file**
175
- - **counter** - Funções para contagem de arquivos
176
- - **temp_dir** - Funções para diretórios temporários
177
- - **screen_shot** - Função para criar diretório e arquivo de print com nome do diretório, arquivo e delay personalizáveis
178
- - **file_flag** - Funções para criar e deletar arquivo utilizado como flag de execução, tendo path e nome do arquivo já automatico porem personalizavel para se adequar ao seu projeto
182
+ - **screen_shot** - Função para capturar screenshots, criando diretórios e arquivos com nomes e caminhos personalizáveis.
183
+ - **flag_create** - Função para criar arquivos de flag indicando execução de processos.
184
+ - **flag_delete** - Função para deletar arquivos de flag após a execução de processos.
185
+ - **count_files** - Função para contar arquivos em diretórios, com suporte a extensões específicas.
186
+ - **directory**
187
+ - **create_temp_dir** - Função para criar diretórios temporários com nomes e caminhos personalizáveis.
188
+ - **delete_temp_dir** - Função para deletar diretórios temporários, com opção de remover arquivos contidos.
179
189
  - **log**
180
- - **logger_uru** - Instanciador de stream e handlefile que cria na pasta raiz do arquivo chamador pasta de log e seta o stream para as funções de log
181
- - **functions_logger_uru** - Funções de log parecida com os prints personalizados, setadas e personalizadas para todos log levels usado pelo ´logger_uru´, escreve no arquivo setado além de gerar o print no terminal
182
- - **printer** - Funções de print personalizados (alerta, erro, sucesso, informativo)
190
+ - **config_logger** - Função para configurar logs com suporte a arquivos e streams, utilizando a biblioteca Loguru.
191
+ - **log_start_run_debug** - Função para registrar logs de início de execução em nível de depuração.
192
+ - **log_debug** - Função para registrar logs em nível de depuração.
193
+ - **log_info** - Função para registrar logs em nível informativo.
194
+ - **log_warning** - Função para registrar logs em nível de aviso.
195
+ - **log_error** - Função para registrar logs em nível de erro.
196
+ - **log_critical** - Função para registrar logs em nível crítico.
197
+ - **printer**
198
+ - **success_print** - Função para imprimir mensagens de sucesso com destaque em verde.
199
+ - **alert_print** - Função para imprimir mensagens de alerta com destaque em amarelo.
200
+ - **info_print** - Função para imprimir mensagens informativas com destaque em ciano.
201
+ - **error_print** - Função para imprimir mensagens de erro com destaque em vermelho.
183
202
  - **regex**
184
- - **pattern_in_text** - Função para otimizar o uso mais comum de regex buscando padrões em um texto
203
+ - **check_pattern_in_text** - Função para verificar a presença de padrões em textos, com suporte a case-sensitive.
185
204
  - **validate**
186
- - **mail_validator** - Função para validar lista de emails, devolvendo a lista com emails validos a partir da lista original
187
- - **string_validator** - Função que valida presença de letras, palavras, e textos e possibilita contar as ocorrencias em uma string
205
+ - **emails** - Função para validar listas de emails, retornando listas de emails válidos e inválidos.
206
+ - **word** - Função para buscar palavras ou padrões específicos em textos, com suporte a contagem de ocorrências.
207
+ - **browser**
208
+ - **start_browser** - Função para iniciar o navegador Chrome com suporte a depuração remota.
209
+ - **find_ele** - Função para localizar elementos na página utilizando estratégias de localização do Selenium.
210
+ - **get** - Função para navegar para URLs específicas.
211
+ - **close_browser** - Função para fechar o navegador e encerrar processos relacionados.
188
212
 
189
213
  ## Release
190
214
 
191
- Versão: **Beta 1.4.5**
215
+ Versão: **Beta 1.4.6**
192
216
 
193
217
  Lançamento: *20/02/2024*
194
218
 
195
- Última atualização: *10/04/2025*
219
+ Última atualização: *12/04/2025*
196
220
 
197
221
  Status: Em desenvolvimento.
198
222
 
199
- ### Notas da atualização: 1.4.5
223
+ ### Notas da atualização: 1.4.6
200
224
 
201
225
  - 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
202
226
  - 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
@@ -212,13 +236,9 @@ Status: Em desenvolvimento.
212
236
  ## Mais Sobre
213
237
 
214
238
  Para mais informações, visite nosso projeto no Github ou PyPi:
215
- `<br>`
216
- `<a href='https://github.com/CamiloCCarvalho/rpa_suite' target='_blank'>`
217
- Ver no GitHub.
218
- `</a>`
219
- `<br>`
220
- `<a href='https://pypi.org/project/rpa-suite/' target='_blank'>`
221
- Ver projeto publicado no PyPI.
222
- `</a>`
239
+
240
+ [Ver no GitHub](https://github.com/CamiloCCarvalho/rpa_suite)
241
+
242
+ [Ver projeto publicado no PyPI](https://pypi.org/project/rpa-suite/)
223
243
 
224
244
  <hr>
@@ -1,12 +1,12 @@
1
- rpa_suite/__init__.py,sha256=hTuXV88YlUdc8It7kyIOC9X61iFm1kZ7Nc8Vi8x0hE0,2412
1
+ rpa_suite/__init__.py,sha256=A6Y1CmdmN9ADAgmvhS8FNXmLNP5fQuyUuZBTm9AKdQo,2494
2
2
  rpa_suite/suite.py,sha256=pCbceWTf9WM_xt0GSf_k7Xnk4w_qHKS1hLscYqV5Ga0,10280
3
- rpa_suite/core/__init__.py,sha256=e7jg0y6Zqcextw3DETOGQ4jAT9g9JpG5G9qLMtO8zqc,1076
4
- rpa_suite/core/browser.py,sha256=HyO-nFHrxPr-StMmtAh_wdaf5YD_J5poh85B71BVbyM,6341
3
+ rpa_suite/core/__init__.py,sha256=TJ-WlsgWTVQ-jc-n66K5ZrqJJeHfI27jXytQVcVHN3M,1640
4
+ rpa_suite/core/browser.py,sha256=E-yD2LgwaDVOwUBs09BBXQVx5tLZ7DMFee8LYvgLClY,14682
5
5
  rpa_suite/core/clock.py,sha256=1QnlOLs9YCRIq-tMFfk9OgaoicKtCL9sBzJmJmz9m_w,13808
6
6
  rpa_suite/core/date.py,sha256=PBU999Acxiwoep029ElqKSzK6T4DrF3eIP-LB_J-BbM,6568
7
7
  rpa_suite/core/dir.py,sha256=y6YDyRYQdf9Bj0z3Gs6ugNZ0tKWYgWdDI5R5BjjRIEY,9783
8
8
  rpa_suite/core/email.py,sha256=kQJAc6Nb9y7jo-oBAo8X1EZS2y-_gTJRoRc9ylS04CE,8675
9
- rpa_suite/core/file.py,sha256=xuXaV_jon8hJ1Fb2j5DukXfnAzZRmtFgVJhTQs8dptU,11572
9
+ rpa_suite/core/file.py,sha256=rgvXqq_uV3D5wsioL4kTy0cbKv0bNO35alSVup6veHk,11524
10
10
  rpa_suite/core/log.py,sha256=xCAoXLxnG2bVzXIafULvW45I4-ljo296E4auU1CppYY,5537
11
11
  rpa_suite/core/print.py,sha256=tLHIKo6LDTrV91gWKvwlTrxb1idgx3EV_fIRkqtzWBM,6389
12
12
  rpa_suite/core/regex.py,sha256=wsTxe8-baKul2Fv1-fycXZ-DVa5krhkc9qMkP04giGs,3303
@@ -21,8 +21,8 @@ rpa_suite/functions/_variables.py,sha256=vCcktifFUriBQTyUaayZW8BlE8Gr7VP-tFbfomK
21
21
  rpa_suite/functions/_variables_uru.py,sha256=xRqYp49l1fFNrHczOmJ6Pqw1PKIWs0f9kxlgvuYGYys,303
22
22
  rpa_suite/utils/__init__.py,sha256=f0qiYRZ7VzBarp1yNj91V0UMZG9QY2mgDXEbWvNZDYs,673
23
23
  rpa_suite/utils/system.py,sha256=JIONQutSbNBkQIATcN1wC0NUE4ILlgVZ-TOnuoMPxHI,1055
24
- rpa_suite-1.4.5.dist-info/licenses/LICENSE,sha256=5D8PIbs31iGd9i1_MDNg4SzaQnp9sEIULALh2y3WyMI,1102
25
- rpa_suite-1.4.5.dist-info/METADATA,sha256=rygafgfaMRQ36VhJ7kRuy0i7NbGn-YCOPCRNISY9rAs,10667
26
- rpa_suite-1.4.5.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
27
- rpa_suite-1.4.5.dist-info/top_level.txt,sha256=HYkDtg-kJNAr3F2XAIPyJ-QBbNhk7q6jrqsFt10lz4Y,10
28
- rpa_suite-1.4.5.dist-info/RECORD,,
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,,