rpa-suite 0.4.8__py3-none-any.whl → 0.5.0__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.
@@ -0,0 +1,47 @@
1
+ from typing import Callable, Any
2
+ import time
3
+ from rpa_suite.log.printer import alert_print, error_print, success_print
4
+
5
+ def exec_wtime(
6
+ while_time: int,
7
+ fn_to_exec: Callable[..., Any],
8
+ *args,
9
+ **kwargs
10
+ ) -> dict:
11
+
12
+ """
13
+ Função temporizada, executa uma função enquanto o tempo (em segundos) da condição não foi atendido.
14
+
15
+ Parametros:
16
+ ----------
17
+ `while_time: int` - (segundos) representa o tempo que deve persistir a execução da função passada no argumento ``fn_to_exec``
18
+
19
+ ``fn_to_exec: function`` - (função) a ser chamada durante o temporizador, se houver parametros nessa função podem ser passados como próximos argumentos desta função em ``*args`` e ``**kwargs``
20
+
21
+ Retorno:
22
+ ----------
23
+ >>> type:dict
24
+ * 'success': bool - representa se ação foi realizada com sucesso
25
+
26
+ Exemplo:
27
+ ---------
28
+ Temos uma função de soma no seguinte formato ``soma(a, b) -> return x``, onde ``x`` é o resultado da soma. Supondo que temos o valor de `a` mas não de `b` podemos executar a função por um tempo `y` até obtermos valor de `b` para saber o resultado da soma:
29
+ >>> exec_wtime(60, soma, a, b) -> x \n
30
+ * OBS.: `exec_wtime` recebe como primeiro argumento o tempo a aguardar (seg), depois a função `soma` e por fim os argumentos que a função ira usar.
31
+ """
32
+
33
+ # Variaveis locais
34
+ result: dict = {
35
+ 'success': bool
36
+ }
37
+ # Pré Tratamento
38
+ ...
39
+
40
+ # Processo
41
+ alert_print(f'Função ainda não implementada!')
42
+
43
+
44
+ # Pós Tratamento
45
+ ...
46
+
47
+ return result
rpa_suite/clock/waiter.py CHANGED
@@ -31,7 +31,7 @@ def wait_for_exec(
31
31
  """
32
32
 
33
33
  # Variaveis locais
34
- waiter_result: dict = {
34
+ result: dict = {
35
35
  'success': bool
36
36
  }
37
37
  # Pré Tratamento
@@ -40,15 +40,15 @@ def wait_for_exec(
40
40
  try:
41
41
  time.sleep(wait_time)
42
42
  fn_to_exec(*args, **kwargs)
43
- waiter_result['success'] = True
43
+ result['success'] = True
44
44
  success_print(f'A função:: {wait_for_exec.__name__} executou a função: {fn_to_exec.__name__}.')
45
45
 
46
46
  except Exception as e:
47
- waiter_result['success'] = False
47
+ result['success'] = False
48
48
  error_print(f'Erro ao tentar aguardar para executar a função: {fn_to_exec.__name__} \nMensagem: {str(e)}')
49
49
 
50
50
 
51
51
  # Pós Tratamento
52
52
  ...
53
53
 
54
- return waiter_result
54
+ return result
File without changes
rpa_suite/date/date.py ADDED
@@ -0,0 +1,82 @@
1
+ import datetime as dt
2
+ from rpa_suite.log.printer import error_print
3
+
4
+
5
+
6
+ def get_hms() -> tuple:
7
+ """
8
+ Função para retornar hora, minuto e segundo. O retorno é em forma de tupla com strings podendo armazenar e usar os valores de forma individual.
9
+
10
+ Tratamento:
11
+ ----------
12
+ A função já faz o tratamento para valores abaixo de 10 mantendo sempre 2 casas decimais em todos resultados, os valores individuais são sempre em formato string
13
+
14
+ Retorno:
15
+ ----------
16
+ >>> type:tuple
17
+ * tuple('hh', 'mm', 'ss') - tupla com os valores de hora, minuto e segundo podendo ser armazenados individualmente, os valores são em string
18
+
19
+ Exemplo:
20
+ ---------
21
+ >>> hora, minuto, segundo = get_hms() \n
22
+ * OBS.: Note que é possivel desestruturar o retorno para armazenar de forma simultânea.
23
+ """
24
+
25
+ # Variaiveis locais
26
+ hours: str
27
+ minutes: str
28
+ seconds: str
29
+
30
+ # Pré tratamento
31
+ now = dt.datetime.now()
32
+ hours: str = str(now.hour) if now.hour > 10 else f"0{now.hour}"
33
+ minutes: str = str(now.minute) if now.minute > 10 else f"0{now.minute}"
34
+ seconds: str = str(now.second) if now.second > 10 else f"0{now.second}"
35
+
36
+ # Processo
37
+ try:
38
+ if len(hours) == 3 or len(minutes) == 3 or len(seconds) == 3:
39
+ if len(seconds) == 3:
40
+ seconds[1:]
41
+ elif len(minutes) == 3:
42
+ minutes[1:]
43
+ elif len(hours) == 3:
44
+ hours[1:]
45
+
46
+ return hours, minutes, seconds
47
+ except Exception as e:
48
+ return error_print(f'Não foi possivel capturar o horário. Erro: {str(e)}')
49
+
50
+ def get_dma() -> tuple:
51
+ """
52
+ Função para retornar dia, mes e ano. O retorno é em forma de tupla com strings podendo armazenar e usar os valores de forma individual.
53
+
54
+ Retorno:
55
+ ----------
56
+ >>> type:tuple
57
+ * tuple('dd', 'mm', 'yy') - tupla com os valores de dia, mes e ano podendo ser armazenados individualmente
58
+
59
+ Exemplo:
60
+ ---------
61
+ >>> dia, mes, ano = get_hms() \n
62
+ * OBS.: Note que é possivel desestruturar o retorno para armazenar de forma simultânea.
63
+ """
64
+
65
+ # Variaiveis locais
66
+ day_got: str
67
+ month_got: str
68
+ year_got: str
69
+
70
+ # Pré tratamento
71
+ now = dt.datetime.now()
72
+
73
+ # Processo
74
+ try:
75
+ day_got: str = str(now.day) if now.day > 10 else f"0{now.day}"
76
+ month_got: str = str(now.month) if now.month > 10 else f"0{now.month}"
77
+ year_got: str = str(now.year) if now.year > 10 else f"0{now.year}"
78
+
79
+ return day_got, month_got, year_got
80
+
81
+ except Exception as e:
82
+ return error_print(f'Não foi possivel capturar o horário. Erro: {str(e)}')
@@ -13,6 +13,7 @@ def send_email(
13
13
  subject_title: str,
14
14
  body_message: str,
15
15
  attachments: list[str] = None,
16
+ type_content: str = 'html',
16
17
  smtp_server: str = 'smtp.office365.com',
17
18
  smtp_port: int = 587
18
19
  ) -> dict:
@@ -21,6 +22,18 @@ def send_email(
21
22
  Função responsavel por enviar emails ``(SMTP)``, aceita ``lista de destinatários`` e possibilidade
22
23
  de ``anexar arquivos``. \n
23
24
 
25
+ Parametros:
26
+ ----------
27
+ ``email_from: str`` - email de quem ira enviar o email.
28
+ ``pass_from: str`` - senha da conta utilizada, aconselhado isolar a senha em outro local.
29
+ ``email_to: list[str]`` - lista de emails para os quais serão enviados os emails.
30
+ ``subject_title: str`` - titulo do email.
31
+ ``body_message: str``- mensagem do corpo do email.
32
+ ``attachments: list[str]`` - lista com caminho de anexos se houver. (default None).
33
+ ``type_content: str`` - tipo de conteudo da mensagem pode ser 'plain' ou 'html' (default 'html').
34
+ ``smtp_server: str`` - servidor a ser utilizado para conectar com a conta de email (default 'smtp.office365.com')
35
+ ``smtp_port: int`` - porta a ser utilizada nesse servidor (default 587)
36
+
24
37
  Retorno:
25
38
  ----------
26
39
  >>> type:dict
@@ -36,7 +49,7 @@ def send_email(
36
49
  """
37
50
 
38
51
  # Variaveis locais
39
- by_smtp_result: dict = {
52
+ result: dict = {
40
53
  'success': bool,
41
54
  'all_mails': list,
42
55
  'valid_mails': list,
@@ -49,9 +62,9 @@ def send_email(
49
62
  email_invalido = []
50
63
 
51
64
  # Pré Tratamentos
52
- by_smtp_result['success'] = False
53
- by_smtp_result['qt_mails_sent'] = 0
54
- by_smtp_result['attchament'] = False
65
+ result['success'] = False
66
+ result['qt_mails_sent'] = 0
67
+ result['attchament'] = False
55
68
 
56
69
  # Configuração inicial basica.
57
70
  msg = MIMEMultipart()
@@ -59,11 +72,11 @@ def send_email(
59
72
  msg['Subject'] = subject_title
60
73
 
61
74
  # Adicionar corpo da mensagem
62
- msg.attach(MIMEText(body_message, 'html'))
75
+ msg.attach(MIMEText(body_message, type_content))
63
76
 
64
77
  # Adicionar anexos, se houver
65
78
  if attachments:
66
- by_smtp_result['attchament'] = True
79
+ result['attchament'] = True
67
80
  for path_to_attach in attachments:
68
81
  file_name = os.path.basename(path_to_attach)
69
82
  attachs = open(path_to_attach, 'rb')
@@ -72,10 +85,10 @@ def send_email(
72
85
  encoders.encode_base64(part)
73
86
  part.add_header('Content-Disposition', "attachment; filename= %s" % file_name)
74
87
  msg.attach(part)
75
- by_smtp_result['qt_attach'] += 1
88
+ result['qt_attach'] += 1
76
89
  else:
77
- by_smtp_result['attchament'] = False
78
- by_smtp_result['qt_attach'] = 0
90
+ result['attchament'] = False
91
+ result['qt_attach'] = 0
79
92
 
80
93
  # Conectar ao servidor SMTP e enviar email
81
94
  try:
@@ -84,6 +97,7 @@ def send_email(
84
97
  server_by_smtp.login(email_from, pass_from)
85
98
  email_content = msg.as_string()
86
99
 
100
+ # Trata a lista de emails antes de tentar realizar o envio, mantendo apenas emails validos
87
101
  try:
88
102
  for emails in email_to:
89
103
  try:
@@ -96,27 +110,28 @@ def send_email(
96
110
  except Exception as e:
97
111
  error_print(f'Erro ao tentar validar lista de emails: {str(e)}')
98
112
 
113
+ # anexa a lista de emails tratada para realizar o envio
99
114
  msg['To'] = ', '.join(email_valido)
100
115
  for email in email_valido:
101
116
  try:
102
117
  server_by_smtp.sendmail(email_from, email, email_content)
103
- by_smtp_result['qt_mails_sent'] += 1
104
- by_smtp_result['all_mails'] = email_to
118
+ result['qt_mails_sent'] += 1
119
+ result['all_mails'] = email_to
105
120
 
106
121
  except smtplib.SMTPException as e:
107
122
  error_print(f'O email: {email} não foi enviado, por causa do erro: {str(e)}')
108
123
 
109
124
  server_by_smtp.quit()
110
- by_smtp_result['success'] = True
125
+ result['success'] = True
111
126
  success_print(f'Email(s) enviado(s) com sucesso!')
112
127
 
113
128
 
114
129
  except smtplib.SMTPException as e:
115
- by_smtp_result['success'] = False
130
+ result['success'] = False
116
131
  error_print(f'Erro ao enviar email(s): {str(e)}')
117
132
 
118
133
  # Pós Tratamento
119
- by_smtp_result['valid_mails'] = email_valido
120
- by_smtp_result['invalid_mails'] = email_invalido
134
+ result['valid_mails'] = email_valido
135
+ result['invalid_mails'] = email_invalido
121
136
 
122
- return by_smtp_result
137
+ return result
rpa_suite/file/counter.py CHANGED
@@ -23,14 +23,14 @@ def count_files(
23
23
  """
24
24
 
25
25
  # Variaveis locais
26
- counter_result: dict = {
26
+ result: dict = {
27
27
  'success': bool,
28
28
  'qt': int
29
29
  }
30
30
 
31
31
  # Pré tratamento
32
- counter_result['qt'] = 0
33
- counter_result['success'] = False
32
+ result['qt'] = 0
33
+ result['success'] = False
34
34
 
35
35
  # Processo
36
36
  try:
@@ -38,16 +38,16 @@ def count_files(
38
38
  for current_dir, sub_dir, files in os.walk(dir):
39
39
  for file in files:
40
40
  if file.endswith(f'.{type_extension}'):
41
- counter_result['qt'] += 1
42
- counter_result['success'] = True
43
- success_print(f'Função: {count_files.__name__} encontrou {counter_result['qt']} arquivos.')
41
+ result['qt'] += 1
42
+ result['success'] = True
43
+ success_print(f'Função: {count_files.__name__} encontrou {result['qt']} arquivos.')
44
44
 
45
45
  except Exception as e:
46
- counter_result['success'] = False
46
+ result['success'] = False
47
47
  error_print(f'Erro ao tentar fazer contagem de arquivos! Erro: {str(e)}')
48
48
 
49
49
  # Pós tratamento
50
50
  ...
51
51
 
52
52
  # Retorno
53
- return counter_result
53
+ return result
@@ -14,12 +14,12 @@ def create_temp_dir(path_to_create: str = 'default') -> dict:
14
14
  ----------
15
15
  >>> type:dict
16
16
  * 'success': bool - representa se ação foi realizada com sucesso
17
- * 'path_deleted': str - path do diretório que foi criado no processo
17
+ * 'path_created': str - path do diretório que foi criado no processo
18
18
 
19
19
  """
20
20
 
21
21
  # Variaveis Locais
22
- temp_dir_result: dict = {
22
+ result: dict = {
23
23
  'success': bool,
24
24
  'path_created': str
25
25
  }
@@ -32,7 +32,7 @@ def create_temp_dir(path_to_create: str = 'default') -> dict:
32
32
  else:
33
33
  default_dir = path_to_create
34
34
  except Exception as e:
35
- temp_dir_result['success'] = False
35
+ result['success'] = False
36
36
  error_print(f'Erro ao capturar caminho atual para criar diretório temporária! Erro: {str(e)}')
37
37
 
38
38
  # Processo
@@ -41,24 +41,24 @@ def create_temp_dir(path_to_create: str = 'default') -> dict:
41
41
  try:
42
42
  os.mkdir(fr'{default_dir}\temp')
43
43
  if os.path.exists(fr'{default_dir}\temp'):
44
- temp_dir_result['success'] = True
44
+ result['success'] = True
45
45
  success_print(fr'Diretório criado em: {default_dir}\temp')
46
46
  else:
47
- temp_dir_result['success'] = False
47
+ result['success'] = False
48
48
  raise Exception
49
49
  except Exception as e:
50
50
  error_print(f'Não foi possivel criar diretório temporario! Erro: {str(e)}')
51
51
  else:
52
- temp_dir_result['success'] = True
52
+ result['success'] = True
53
53
  alert_print(fr'AVISO! diretório já existe em: {default_dir}\temp ')
54
54
  except Exception as e:
55
55
  error_print(f'Erro ao tentar criar diretório temporaria em: {default_dir} - Erro: {str(e)}')
56
56
 
57
57
  # Pós tratamento
58
- temp_dir_result['path_created'] = fr'{default_dir}\temp'
58
+ result['path_created'] = fr'{default_dir}\temp'
59
59
 
60
60
  # Retorno
61
- return temp_dir_result
61
+ return result
62
62
 
63
63
 
64
64
  def delete_temp_dir(path_to_delete: str = 'default') -> dict:
@@ -25,7 +25,7 @@ def valid_emails(
25
25
  """
26
26
 
27
27
  # Variaveis locais
28
- mail_validation_result: dict = {
28
+ result: dict = {
29
29
  'success': bool,
30
30
  'valid_emails': list,
31
31
  'invalid_emails': list,
@@ -56,7 +56,7 @@ def valid_emails(
56
56
 
57
57
 
58
58
  # Pós Tratamento
59
- mail_validation_result = {
59
+ result = {
60
60
  'valid_emails': validated_emails,
61
61
  'invalid_emails': invalid_emails,
62
62
  'success': len(invalid_emails) == 0,
@@ -65,4 +65,4 @@ def valid_emails(
65
65
  'map_validation': map_validation
66
66
  }
67
67
 
68
- return mail_validation_result
68
+ return result
@@ -1,6 +1,4 @@
1
-
2
- from rpa_suite.log.printer import success_print
3
-
1
+ from rpa_suite.log.printer import success_print, error_print
4
2
 
5
3
  def search_in(
6
4
  origin_text: str,
@@ -30,58 +28,68 @@ def search_in(
30
28
  um dicionário com todas informações que podem ser necessarias sobre a validação.
31
29
  Sendo respectivamente:
32
30
  * 'is_found': bool - se o pattern foi encontrado em pelo menos um caso
33
- * 'number_occurrences': int - representa o numero de vezes que esse pattern foi econtrado
31
+ * 'number_occurrences': int - representa o número de vezes que esse pattern foi econtrado
34
32
  * 'positions': list[set(int, int), ...] - representa todas posições onde apareceu o pattern no texto original
35
33
 
36
- Sobre o `Position`:
34
+ Sobre o `Positions`:
37
35
  -----------
38
36
  >>> type: list[set(int, int), ...]
39
- * no ``index = 0`` encontramos a primeira ocorrencia do texto, e a ocorrencia é composta por um PAR de numeros em um set, os demais indexes representam outras posições onde foram encontradas ocorrencias caso hajam.
37
+ * no `index = 0` encontramos a primeira ocorrência do texto, e a ocorrência é composta por um PAR de números em um set, os demais indexes representam outras posições onde foram encontradas ocorrências caso hajam.
40
38
 
41
39
  """
42
40
 
43
41
  # Variaveis locais
44
- string_validator_result: dict = {
42
+ result: dict = {
45
43
  'is_found': bool,
46
44
  'number_occurrences': int,
47
45
  'positions': list[set]
48
46
  }
49
47
 
50
48
  # Pré tratamento
51
- string_validator_result['is_found'] = False
52
- string_validator_result['number_occurrences'] = 0
49
+ result['is_found'] = False
50
+ result['number_occurrences'] = 0
53
51
 
54
52
  # Processo
55
- if search_by == 'word':
56
- origin_words = origin_text.split()
57
- if case_sensitivy:
58
- string_validator_result['is_found'] = searched_word in origin_words
53
+ try:
54
+ if search_by == 'word':
55
+ origin_words = origin_text.split()
56
+ try:
57
+ if case_sensitivy:
58
+ result['is_found'] = searched_word in origin_words
59
59
 
60
- else:
61
- words_lowercase = [word.lower() for word in origin_words]
62
- searched_word = searched_word.lower()
63
- string_validator_result['is_found'] = searched_word in words_lowercase
60
+ else:
61
+ words_lowercase = [word.lower() for word in origin_words]
62
+ searched_word = searched_word.lower()
63
+ result['is_found'] = searched_word in words_lowercase
64
+ except Exception as e:
65
+ return error_print(f'Não foi possivel concluir a busca de: {searched_word}. Erro: {str(e)}')
66
+
67
+ elif search_by == 'string':
68
+ try:
69
+ if case_sensitivy:
70
+ result['is_found'] = origin_text.__contains__(searched_word)
71
+ else:
72
+ origin_text_lower: str = origin_text.lower()
73
+ searched_word_lower: str = searched_word.lower()
74
+ result['is_found'] = origin_text_lower.__contains__(searched_word_lower)
75
+ except Exception as e:
76
+ return error_print(f'Não foi possivel concluir a busca de: {searched_word}. Erro: {str(e)}')
64
77
 
65
- elif search_by == 'string':
66
- if case_sensitivy:
67
- string_validator_result['is_found'] = origin_text.__contains__(searched_word)
68
- else:
69
- origin_text_lower: str = origin_text.lower()
70
- searched_word_lower: str = searched_word.lower()
71
- string_validator_result['is_found'] = origin_text_lower.__contains__(searched_word_lower)
78
+ except Exception as e:
79
+ return error_print(f'Não foi possivel realizar a busca por: {searched_word}. Erro: {str(e)}')
72
80
 
73
81
  """
74
82
  elif search_by == 'regex':
75
83
  # regex search
76
84
  pass
77
85
  else:
78
- print(f'por favor digite alguma forma de busca valida para a função, a função aceita: string, word e regex, como padrões de busca para fazer a pesquisa no texto original.')
86
+ error_print(f'por favor digite alguma forma de busca válida para a função, a função aceita: 'string', 'word' e 'regex', como padrões de busca para fazer a pesquisa no texto original.')
79
87
  """
80
88
 
81
89
  # Pós tratamento
82
- if string_validator_result['is_found']:
83
- success_print(f'Função: {search_in.__name__} encontrou: {string_validator_result["number_occurrences"]} ocorrências para "{searched_word}".')
90
+ if result['is_found']:
91
+ success_print(f'Função: {search_in.__name__} encontrou: {result["number_occurrences"]} ocorrências para "{searched_word}".')
84
92
  else:
85
93
  success_print(f'Função: {search_in.__name__} não encontrou ocorrências de "{searched_word}" durante a busca.')
86
94
 
87
- return string_validator_result
95
+ return result
@@ -0,0 +1,87 @@
1
+ Metadata-Version: 2.1
2
+ Name: rpa-suite
3
+ Version: 0.5.0
4
+ Summary: Conjunto de ferramentas essenciais para RPA com Python, que facilitam o dia a dia de desenvolvimento.
5
+ Author: Camilo Costa de Carvalho
6
+ Author-email: camilo.carvalho@triasoftware.com.br
7
+ License: MIT
8
+ Keywords: basic-tools,email-tools,email-validation,file-tools,simple-functions,rpa-tools,rpa-functions
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.7
13
+ Classifier: Programming Language :: Python :: 3.8
14
+ Classifier: Programming Language :: Python :: 3.9
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: loguru
18
+ Requires-Dist: colorama
19
+ Requires-Dist: email-validator
20
+
21
+ <div align="center">
22
+ <a href='https://pypi.org/project/rpa-suite/' target='_blank'>
23
+ <img src='./logo-rpa-suite.png' alt='Logo - RPA Suite' width='56px'>
24
+ </a>
25
+ </div>
26
+ <h1 align="center">
27
+ Suite RPA
28
+ </h1>
29
+
30
+ ## Kit de ferramentas para o desenvolvimento do seu bot, automação ou projeto.
31
+
32
+ :handshake: **Versátil**: Embora tenha sido criado com foco no desenvolvimento de BOTs em RPA, as ferramentas são de uso geral e podem ser aplicadas em outros tipos de projetos, *além do RPA*.
33
+
34
+ :seedling: **Simples**: Construímos as ferramentas de maneira mais direta e assertiva possível, utilizando apenas bibliotecas conhecidas no mercado para garantir o melhor aproveitamento e desempenho possível.
35
+
36
+ ## Objetivo:
37
+
38
+ Nosso objetivo é tornar o desenvolvimento de RPAs mais produtivo, oferecendo funções prontas para usos comuns, como:
39
+
40
+ - envio de emails (configurações já pré-montadas)
41
+ - validação de emails (limpeza e tratamento de listas)
42
+ - busca por palavras ou patterns em textos ou cadeias de string
43
+ - criação de pastas e arquivos temporarios e deleta-los com apenas um comando
44
+ - console com mensagens de melhor visualização com cores definidas para alerta, erro, informativo e sucesso.
45
+ - e muitas outras facilidades
46
+
47
+ ### Instalação:
48
+ Para instalar o projeto, utilize o comando
49
+
50
+ >>> python -m pip install rpa-suite
51
+
52
+ ### Dependencias:
53
+ No setup do nosso projeto já estão inclusas as dependencias, só será necessario instalar nossa **Lib**, mas segue a lista das libs usadas:
54
+ - colorama
55
+ - loguru
56
+ - email-validator
57
+
58
+ ### Estrutura do módulo:
59
+ 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
60
+ - **rpa_suite**
61
+ - **clock**
62
+ - **waiter** - módulo com funções para aguardar execução
63
+ - **email**
64
+ - **sender_smtp** - módulo com funções para envio de email SMPT
65
+ - **file**
66
+ - **counter** - módulo com funções para contagens
67
+ - **temp_dir** - módulo com funções para diretórios temporarios
68
+ - **log**
69
+ - **loggin** - módulo com funções responsaveis por gerar decoradores de de print para logs de execução
70
+ - **printer** - módulo com funções de print personalizados para notificações em prompt
71
+ - **validate**
72
+ - **mail_validator** - módulo com funções para validação de emails
73
+ - **string_validator** - módulo com funções para validação e varredura de strings / substrings / palavras
74
+
75
+ ### Versão do projeto:
76
+ A versão mais recente é a **Alpha 0.4.6**, lançada em *23/11/2023*. O projeto está atualmente em desenvolvimento.
77
+
78
+ ### Mais Sobre:
79
+
80
+ Para mais informações, visite nosso projeto no Github ou PyPi:
81
+ <a href='https://github.com/CamiloCCarvalho/rpa_suite' target='_blank'>
82
+ Ver no GitHub.
83
+ </a>
84
+ </br>
85
+ <a href='https://pypi.org/project/rpa-suite/' target='_blank'>
86
+ Ver projeto publicado no PyPI.
87
+ </a>
@@ -0,0 +1,22 @@
1
+ rpa_suite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ rpa_suite/clock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ rpa_suite/clock/exec_while.py,sha256=ppz5BTOsk1ofsdmj_C_4aAEcXg5QtyOdyna3Bp0Uy6Q,1737
4
+ rpa_suite/clock/waiter.py,sha256=WFPPBuDflgJrMtBKcRihJJUVECVLuPZepAy9aGm_UW4,1981
5
+ rpa_suite/date/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ rpa_suite/date/date.py,sha256=5VXiQehSsd-0RmGnZ_amdGfxyBu3a7A-Go-KUt34tIw,2826
7
+ rpa_suite/email/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ rpa_suite/email/sender_smtp.py,sha256=Qjw-6E6uDoYl94wbLcC_f6Gv6GxZHBXmm3YV1F3yGmU,5252
9
+ rpa_suite/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ rpa_suite/file/counter.py,sha256=ynB3k7i_lc_TamN-pC-Ne16dbYayqpdc7gfumc-1nEQ,1797
11
+ rpa_suite/file/temp_dir.py,sha256=A2qW3Svq4zRbNsHXl8T021mnIrDqd00wMrlpox-SS5M,4576
12
+ rpa_suite/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ rpa_suite/log/loggin.py,sha256=3f7JdA2zp6mTperx406zbud8v0miwhHLTkT2sxMy63M,872
14
+ rpa_suite/log/printer.py,sha256=yzFO6MBgbsbaFzEnq9l0PcUTgb9fjQiPMAYDV20lhEA,2805
15
+ rpa_suite/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ rpa_suite/validate/mail_validator.py,sha256=kGifg4ydz8Oh50Hr37t0Py82u4vUap7yzABGQOKE1lQ,2165
17
+ rpa_suite/validate/string_validator.py,sha256=LQY-FRv8JX9OluOieGmhVi-prso5LakAnhHZE-dIbuw,3937
18
+ rpa_suite-0.5.0.dist-info/LICENSE,sha256=5D8PIbs31iGd9i1_MDNg4SzaQnp9sEIULALh2y3WyMI,1102
19
+ rpa_suite-0.5.0.dist-info/METADATA,sha256=g67xU4o6_VZ0xuIavuqUgtgbyIU4XiZR64neIgYfaf0,3825
20
+ rpa_suite-0.5.0.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
21
+ rpa_suite-0.5.0.dist-info/top_level.txt,sha256=HYkDtg-kJNAr3F2XAIPyJ-QBbNhk7q6jrqsFt10lz4Y,10
22
+ rpa_suite-0.5.0.dist-info/RECORD,,
@@ -1,74 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: rpa-suite
3
- Version: 0.4.8
4
- Summary: Conjunto de ferramentas essenciais para RPA com Python, que facilitam o dia a dia de desenvolvimento.
5
- Author: Camilo Costa de Carvalho
6
- Author-email: camilo.carvalho@triasoftware.com.br
7
- License: MIT
8
- Keywords: basic-tools,email-tools,email-validation,file-tools,simple-functions,rpa-tools,rpa-functions
9
- Classifier: Development Status :: 3 - Alpha
10
- Classifier: License :: OSI Approved :: MIT License
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.7
13
- Classifier: Programming Language :: Python :: 3.8
14
- Classifier: Programming Language :: Python :: 3.9
15
- Description-Content-Type: text/markdown
16
- License-File: LICENSE
17
- Requires-Dist: loguru
18
- Requires-Dist: colorama
19
- Requires-Dist: email-validator
20
-
21
- # Suite RPA:
22
-
23
- ## Kit de ferramentas para o desenvolvimento do seu bot, automação ou projeto.
24
-
25
- **Versatil**: Embora criado com foco no desenvolvimento de BOTs em RPA, as ferramentas são de uso geral, podem ser *aplicadas também em outros modelos de projetos além do RPA*.
26
-
27
- **Simples**: Contruimos as ferramentas de maneira mais direta e acertiva possivel e usando apenas libs conhecidas no mercado, para melhor aproveitamento e performance possivel.
28
-
29
- ## Objetivo:
30
-
31
- Estamos tornando mais produtivo o desenvolvimento de *RPAs*, proporcionando funções prontas para usos comuns como:
32
-
33
- - envio de emails (configurações já pré-montadas)
34
- - validação de emails (limpeza e tratamento de listas)
35
- - busca por palavras ou patterns em textos ou cadeias de string
36
- - criação de pastas e arquivos temporarios e deleta-los com apenas um comando
37
- - console com mensagens de melhor visualização com cores definidas para alerta, erro, informativo e sucesso.
38
- - e muitas outras facilidades
39
-
40
- ### Instalação:
41
- >>> python -m pip install rpa-suite
42
-
43
- ### Dependencias:
44
- No setup do nosso projeto já estão inclusas as dependencias, só será necessario instalar nossa **Lib**, mas segue a lista das libs usadas:
45
- - colorama
46
- - loguru
47
- - email-validator
48
-
49
- ### Estrutura do modulo:
50
- O modulo principal do rpa-suite é dividido em categorias, onde por sua vez tem os modulos com funções destinadas a cada tipo de tarefa.
51
- - **rpa_suite**
52
- - **clock**
53
- - **waiter** - modulo com funções responsaveis por aguardar
54
- - **email**
55
- - **sender_smtp** - modulo com funções para envio de email SMPT
56
- - **file**
57
- - **counter** - modulo com funções responsaveis por contagens
58
- - **temp_dir** - modulo com funções responsaveis por diretórios temporarios
59
- - **log**
60
- - **loggin** - modulo com funções responsaveis por gerar decoradores de de print para logs de execução
61
- - **printer** - modulo com funções de print personalizados para notificações em prompt
62
- - **validate**
63
- - **mail_validator** - modulo com funções para validação de emails
64
- - **string_validator** - modulo com funções para validação e varredura de strings / substrings / palavras
65
-
66
- ### Versão do projeto:
67
- Ultima versão release: **Alpha 0.4.6**
68
- Data da ultima versão: 23/11/2023
69
- Status: Em Desenvolvimento
70
-
71
- ### Mais Sobre:
72
-
73
- Você pode ver mais com mais detalhes no **Github**.
74
- https://github.com/CamiloCCarvalho/rpa_suite
@@ -1,19 +0,0 @@
1
- rpa_suite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- rpa_suite/clock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- rpa_suite/clock/waiter.py,sha256=3nGwihkQCoC95jKJGaGxJ5jfT0gZBPHhDZsEcdmjnz4,2009
4
- rpa_suite/email/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- rpa_suite/email/sender_smtp.py,sha256=ilTqWVajqUY5fNSBiNDOUa9EtC6d2YXYX-GSn1AsiIY,4381
6
- rpa_suite/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- rpa_suite/file/counter.py,sha256=sLUf7SUaVlUy2b3JJfWAc9DuOOpszqBgUQRQnylIdeQ,1861
8
- rpa_suite/file/temp_dir.py,sha256=MpmhyLqWloXF-z_Uc4u6n-fW7q8L8IfKB8xqrMZZS_E,4639
9
- rpa_suite/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- rpa_suite/log/loggin.py,sha256=3f7JdA2zp6mTperx406zbud8v0miwhHLTkT2sxMy63M,872
11
- rpa_suite/log/printer.py,sha256=yzFO6MBgbsbaFzEnq9l0PcUTgb9fjQiPMAYDV20lhEA,2805
12
- rpa_suite/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- rpa_suite/validate/mail_validator.py,sha256=Aa4jMo2MhUr1uQrzzPiWWqO81GBDM_n7zpN_urCz62o,2213
14
- rpa_suite/validate/string_validator.py,sha256=w2VLNlyopplALZtmLfiQu_bBcJ6mPSROlyTAPHHPtuk,3483
15
- rpa_suite-0.4.8.dist-info/LICENSE,sha256=5D8PIbs31iGd9i1_MDNg4SzaQnp9sEIULALh2y3WyMI,1102
16
- rpa_suite-0.4.8.dist-info/METADATA,sha256=VyQ6P8wXnU4aUWl4g29vJ9KjIH7b4H8WDFB8cYFNaDY,3334
17
- rpa_suite-0.4.8.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
18
- rpa_suite-0.4.8.dist-info/top_level.txt,sha256=HYkDtg-kJNAr3F2XAIPyJ-QBbNhk7q6jrqsFt10lz4Y,10
19
- rpa_suite-0.4.8.dist-info/RECORD,,