rpa-suite 0.9.1__tar.gz → 0.9.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/PKG-INFO +4 -4
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/README.md +3 -3
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/clock/exec_at.py +43 -36
- rpa_suite-0.9.4/rpa_suite/clock/scheduler.py +36 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/clock/waiter.py +2 -2
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/date/date.py +12 -5
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/email/sender_smtp.py +2 -1
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/file/counter.py +17 -16
- rpa_suite-0.9.4/rpa_suite/file/temp_dir.py +171 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/log/loggin.py +1 -1
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/log/printer.py +31 -24
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/regex/list_from_text.py +7 -5
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/suite.py +23 -17
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite.egg-info/PKG-INFO +4 -4
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite.egg-info/SOURCES.txt +1 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/setup.py +1 -1
- rpa_suite-0.9.1/rpa_suite/file/temp_dir.py +0 -161
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/LICENSE +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/__init__.py +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/clock/__init__.py +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/date/__init__.py +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/email/__init__.py +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/file/__init__.py +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/log/__init__.py +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/regex/__init__.py +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/validate/__init__.py +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/validate/mail_validator.py +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite/validate/string_validator.py +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite.egg-info/dependency_links.txt +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite.egg-info/requires.txt +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/rpa_suite.egg-info/top_level.txt +0 -0
- {rpa_suite-0.9.1 → rpa_suite-0.9.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: rpa_suite
|
3
|
-
Version: 0.9.
|
3
|
+
Version: 0.9.4
|
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
|
@@ -134,11 +134,11 @@ O módulo principal do rpa-suite é dividido em categorias. Cada categoria cont
|
|
134
134
|
- **waiter** - Funções para aguardar em relação a execução de uma função, podendo ser antes ou depois
|
135
135
|
- **exec_at** - Funções para executar em momentos pré determinados
|
136
136
|
- **date**
|
137
|
-
- **date** - Funções para capturar data,
|
137
|
+
- **date** - Funções para capturar data, mês, ano, hora, minutos de forma individual em apenas uma linha
|
138
138
|
- **email**
|
139
139
|
- **sender_smtp** - Funções para envio de email SMPT
|
140
140
|
- **file**
|
141
|
-
- **counter** - Funções para
|
141
|
+
- **counter** - Funções para contagem de arquivos
|
142
142
|
- **temp_dir** - Funções para diretórios temporários
|
143
143
|
- **log**
|
144
144
|
- **loggin** - Funções decoradoras com log de execução das funções
|
@@ -150,7 +150,7 @@ O módulo principal do rpa-suite é dividido em categorias. Cada categoria cont
|
|
150
150
|
- **string_validator** - Funções para validação/varredura (strings, substrings, palavras)
|
151
151
|
|
152
152
|
## Release
|
153
|
-
Versão: **Alpha 0.9.
|
153
|
+
Versão: **Alpha 0.9.4**
|
154
154
|
|
155
155
|
Lançamento: *20/02/2024*
|
156
156
|
|
@@ -109,11 +109,11 @@ O módulo principal do rpa-suite é dividido em categorias. Cada categoria cont
|
|
109
109
|
- **waiter** - Funções para aguardar em relação a execução de uma função, podendo ser antes ou depois
|
110
110
|
- **exec_at** - Funções para executar em momentos pré determinados
|
111
111
|
- **date**
|
112
|
-
- **date** - Funções para capturar data,
|
112
|
+
- **date** - Funções para capturar data, mês, ano, hora, minutos de forma individual em apenas uma linha
|
113
113
|
- **email**
|
114
114
|
- **sender_smtp** - Funções para envio de email SMPT
|
115
115
|
- **file**
|
116
|
-
- **counter** - Funções para
|
116
|
+
- **counter** - Funções para contagem de arquivos
|
117
117
|
- **temp_dir** - Funções para diretórios temporários
|
118
118
|
- **log**
|
119
119
|
- **loggin** - Funções decoradoras com log de execução das funções
|
@@ -125,7 +125,7 @@ O módulo principal do rpa-suite é dividido em categorias. Cada categoria cont
|
|
125
125
|
- **string_validator** - Funções para validação/varredura (strings, substrings, palavras)
|
126
126
|
|
127
127
|
## Release
|
128
|
-
Versão: **Alpha 0.9.
|
128
|
+
Versão: **Alpha 0.9.4**
|
129
129
|
|
130
130
|
Lançamento: *20/02/2024*
|
131
131
|
|
@@ -8,7 +8,7 @@ def exec_at_hour(
|
|
8
8
|
fn_to_exec: Callable[..., Any],
|
9
9
|
*args,
|
10
10
|
**kwargs,
|
11
|
-
) -> dict:
|
11
|
+
) -> dict[str, bool]:
|
12
12
|
|
13
13
|
"""
|
14
14
|
Timed function, executes the function at the specified time, by ``default`` it executes at runtime, optionally you can choose the time for execution.
|
@@ -65,35 +65,18 @@ def exec_at_hour(
|
|
65
65
|
minutes: str
|
66
66
|
moment_now: str
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
if hour_to_exec == None:
|
68
|
+
try:
|
69
|
+
# Preprocessing
|
70
|
+
run = True
|
71
|
+
now = dt.now()
|
72
|
+
hours = str(now.hour) if now.hour > 10 else f"0{now.hour}"
|
73
|
+
minutes = str(now.minute) if now.minute > 10 else f"0{now.minute}"
|
74
|
+
moment_now = f'{hours}:{minutes}'
|
76
75
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
run = False
|
82
|
-
result['tried'] = not run
|
83
|
-
result['success'] = True
|
84
|
-
success_print(f'{fn_to_exec.__name__}: Successfully executed!')
|
85
|
-
break
|
86
|
-
|
87
|
-
except Exception as e:
|
88
|
-
run = False
|
89
|
-
result['tried'] = not run
|
90
|
-
result['success'] = False
|
91
|
-
error_print(f'An error occurred that prevented the function from executing: {fn_to_exec.__name__} correctly. Error: {str(e)}')
|
92
|
-
break
|
93
|
-
else:
|
94
|
-
# Executes the function call only at the time provided in the argument.
|
95
|
-
while run:
|
96
|
-
if moment_now == hour_to_exec:
|
76
|
+
if hour_to_exec == None:
|
77
|
+
|
78
|
+
# Process
|
79
|
+
while run:
|
97
80
|
try:
|
98
81
|
fn_to_exec(*args, **kwargs)
|
99
82
|
run = False
|
@@ -108,11 +91,35 @@ def exec_at_hour(
|
|
108
91
|
result['success'] = False
|
109
92
|
error_print(f'An error occurred that prevented the function from executing: {fn_to_exec.__name__} correctly. Error: {str(e)}')
|
110
93
|
break
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
94
|
+
else:
|
95
|
+
# Executes the function call only at the time provided in the argument.
|
96
|
+
while run:
|
97
|
+
if moment_now == hour_to_exec:
|
98
|
+
try:
|
99
|
+
fn_to_exec(*args, **kwargs)
|
100
|
+
run = False
|
101
|
+
result['tried'] = not run
|
102
|
+
result['success'] = True
|
103
|
+
success_print(f'{fn_to_exec.__name__}: Successfully executed!')
|
104
|
+
break
|
105
|
+
|
106
|
+
except Exception as e:
|
107
|
+
run = False
|
108
|
+
result['tried'] = not run
|
109
|
+
result['success'] = False
|
110
|
+
error_print(f'An error occurred that prevented the function from executing: {fn_to_exec.__name__} correctly. Error: {str(e)}')
|
111
|
+
break
|
112
|
+
else:
|
113
|
+
time.sleep(30)
|
114
|
+
now = dt.now()
|
115
|
+
hours = str(now.hour) if now.hour > 10 else f"0{now.hour}"
|
116
|
+
minutes = str(now.minute) if now.minute > 10 else f"0{now.minute}"
|
117
|
+
moment_now = f'{hours}:{minutes}'
|
117
118
|
|
118
|
-
|
119
|
+
return result
|
120
|
+
|
121
|
+
except Exception as e:
|
122
|
+
|
123
|
+
result['success'] = False
|
124
|
+
error_print(f'An error occurred on function from executing: {fn_to_exec.__name__}. Error: {str(e)}')
|
125
|
+
return result
|
@@ -0,0 +1,36 @@
|
|
1
|
+
import schedule
|
2
|
+
import time
|
3
|
+
import subprocess
|
4
|
+
|
5
|
+
def run_python_script(script_path):
|
6
|
+
try:
|
7
|
+
subprocess.run(['python', script_path], check=True)
|
8
|
+
except subprocess.CalledProcessError as e:
|
9
|
+
print(f"Erro ao executar o script {script_path}: {e}")
|
10
|
+
|
11
|
+
def batch1():
|
12
|
+
# Substitua 'script1.py' pelo caminho do primeiro script Python que deseja executar
|
13
|
+
run_python_script('script1.py')
|
14
|
+
|
15
|
+
def batch2():
|
16
|
+
# Substitua 'script2.py' pelo caminho do segundo script Python que deseja executar
|
17
|
+
run_python_script('script2.py')
|
18
|
+
|
19
|
+
def batch3():
|
20
|
+
# Substitua 'script3.py' pelo caminho do terceiro script Python que deseja executar
|
21
|
+
run_python_script('script3.py')
|
22
|
+
|
23
|
+
print("Aguardando nova execução...")
|
24
|
+
|
25
|
+
# Horário para executar o primeiro batch (substitua com o horário desejado)
|
26
|
+
schedule.every().day.at("08:00").do(batch1)
|
27
|
+
|
28
|
+
# Horário para executar o segundo batch (substitua com o horário desejado)
|
29
|
+
schedule.every().day.at("12:00").do(batch2)
|
30
|
+
|
31
|
+
# Horário para executar o terceiro batch (substitua com o horário desejado)
|
32
|
+
schedule.every().day.at("16:00").do(batch3)
|
33
|
+
|
34
|
+
while True:
|
35
|
+
schedule.run_pending()
|
36
|
+
time.sleep(1)
|
@@ -7,7 +7,7 @@ def wait_for_exec(
|
|
7
7
|
fn_to_exec: Callable[..., Any],
|
8
8
|
*args,
|
9
9
|
**kwargs
|
10
|
-
) -> dict:
|
10
|
+
) -> dict[str, bool]:
|
11
11
|
|
12
12
|
"""
|
13
13
|
Timer function, wait for a value in ``seconds`` to execute the function of the argument.
|
@@ -74,7 +74,7 @@ def exec_and_wait(
|
|
74
74
|
fn_to_exec: Callable[..., Any],
|
75
75
|
*args,
|
76
76
|
**kwargs
|
77
|
-
) -> dict:
|
77
|
+
) -> dict[str, bool]:
|
78
78
|
|
79
79
|
"""
|
80
80
|
Timer function, executes a function and waits for the time in ``seconds``
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import datetime as dt
|
2
|
+
from typing import Optional as Op
|
3
|
+
from typing import Tuple
|
2
4
|
from rpa_suite.log.printer import error_print
|
3
5
|
|
4
6
|
|
5
|
-
|
6
|
-
def get_hms() -> tuple:
|
7
|
+
def get_hms() -> Tuple[Op[str], Op[str], Op[str]]:
|
7
8
|
|
8
9
|
"""
|
9
10
|
Function to return hour, minute and second. The return is in the form of a tuple with strings being able to store and use the values individually.
|
@@ -63,10 +64,14 @@ def get_hms() -> tuple:
|
|
63
64
|
hours[1:]
|
64
65
|
|
65
66
|
return hours, minutes, seconds
|
67
|
+
|
66
68
|
except Exception as e:
|
67
|
-
return error_print(f'Unable to capture the time. Error: {str(e)}')
|
68
69
|
|
69
|
-
|
70
|
+
error_print(f'Unable to capture the time. Error: {str(e)}')
|
71
|
+
return None, None, None
|
72
|
+
|
73
|
+
|
74
|
+
def get_dma() -> Tuple[Op[str], Op[str], Op[str]]:
|
70
75
|
"""
|
71
76
|
Function to return day, month and year. The return is in the form of a tuple with strings being able to store and use the values individually.
|
72
77
|
|
@@ -112,4 +117,6 @@ def get_dma() -> tuple:
|
|
112
117
|
return day_got, month_got, year_got
|
113
118
|
|
114
119
|
except Exception as e:
|
115
|
-
|
120
|
+
|
121
|
+
error_print(f'Unable to capture the time. Error: {str(e)}')
|
122
|
+
return None, None, None
|
@@ -122,6 +122,7 @@ def send_email(
|
|
122
122
|
|
123
123
|
# Add Attachment
|
124
124
|
if attachments:
|
125
|
+
result['qt_attach'] = 0
|
125
126
|
result['attchament'] = True
|
126
127
|
for path_to_attach in attachments:
|
127
128
|
file_name = os.path.basename(path_to_attach)
|
@@ -170,7 +171,7 @@ def send_email(
|
|
170
171
|
server_by_smtp.quit()
|
171
172
|
result['success'] = True
|
172
173
|
success_print(f'Email(s) Sent!')
|
173
|
-
|
174
|
+
|
174
175
|
|
175
176
|
except smtplib.SMTPException as e:
|
176
177
|
result['success'] = False
|
@@ -1,53 +1,53 @@
|
|
1
1
|
import os
|
2
|
+
from typing import Dict, List, Union
|
2
3
|
from rpa_suite.log.printer import error_print, success_print
|
3
4
|
|
5
|
+
|
4
6
|
def count_files(
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
dir_to_count: List[str],
|
8
|
+
type_extension: str = '*'
|
9
|
+
) -> Dict[str, Union[bool, int]]:
|
10
|
+
|
9
11
|
"""
|
10
12
|
Function responsible for counting files within a folder, considers subfolders to do the count, searches by file type, being all files by default. \n
|
11
|
-
|
13
|
+
|
12
14
|
Parameters:
|
13
15
|
----------
|
14
16
|
``dir_to_count: list`` - should be a list, accepts more than one path to count files.
|
15
17
|
``type_extension: str`` - should be a string with the format/extension of the type of file you want to be searched for counting, if empty by default will be used ``*`` which will count all files.
|
16
18
|
|
17
|
-
|
18
19
|
Return:
|
19
20
|
----------
|
20
21
|
>>> type:dict
|
21
22
|
* 'success': bool - represents if the action was performed successfully
|
22
23
|
* 'qt': int - number that represents the quantity of files that were counted
|
23
|
-
|
24
|
+
|
24
25
|
Description: pt-br
|
25
26
|
----------
|
26
27
|
Função responsavel por fazer a contagem de arquivos dentro de uma pasta, considera subpastas para fazer a contagem, busca por tipo de arquivo, sendo todos arquivos por default. \n
|
27
|
-
|
28
|
+
|
28
29
|
Parametros:
|
29
30
|
----------
|
30
31
|
``dir_to_count: list`` - deve ser uma lista, aceita mais de um caminho para contar arquivos.
|
31
32
|
``type_extension: str`` - deve ser uma string com o formato/extensão do tipo de arquivo que deseja ser buscado para contagem, se vazio por default sera usado ``*`` que contará todos arquivos.
|
32
33
|
|
33
|
-
|
34
34
|
Retorno:
|
35
35
|
----------
|
36
36
|
>>> type:dict
|
37
37
|
* 'success': bool - representa se ação foi realizada com sucesso
|
38
38
|
* 'qt': int - numero que representa a quantidade de arquivos que foram contados
|
39
39
|
"""
|
40
|
-
|
40
|
+
|
41
41
|
# Local Variables
|
42
42
|
result: dict = {
|
43
43
|
'success': bool,
|
44
44
|
'qt': int
|
45
45
|
}
|
46
|
-
|
46
|
+
|
47
47
|
# Preprocessing
|
48
|
-
result['qt'] = 0
|
49
48
|
result['success'] = False
|
50
|
-
|
49
|
+
result['qt'] = 0
|
50
|
+
|
51
51
|
# Process
|
52
52
|
try:
|
53
53
|
for dir in dir_to_count:
|
@@ -57,9 +57,10 @@ def count_files(
|
|
57
57
|
result['qt'] += 1
|
58
58
|
result['success'] = True
|
59
59
|
success_print(f'Function: {count_files.__name__} counted {result["qt"]} files.')
|
60
|
-
|
60
|
+
|
61
61
|
except Exception as e:
|
62
62
|
result['success'] = False
|
63
63
|
error_print(f'Error when trying to count files! Error: {str(e)}')
|
64
|
-
|
65
|
-
|
64
|
+
|
65
|
+
finally:
|
66
|
+
return result
|
@@ -0,0 +1,171 @@
|
|
1
|
+
import os, shutil
|
2
|
+
from typing import Union
|
3
|
+
from rpa_suite.log.printer import error_print, alert_print, success_print
|
4
|
+
|
5
|
+
|
6
|
+
def create_temp_dir(path_to_create: str = 'default', name_temp_dir: str='temp') -> dict[str, Union[bool, str, None]]:
|
7
|
+
|
8
|
+
"""
|
9
|
+
Function responsible for creating a temporary directory to work with files and etc. \n
|
10
|
+
|
11
|
+
Parameters:
|
12
|
+
----------
|
13
|
+
``path_to_create: str`` - should be a string with the full path pointing to the folder where the temporary 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.
|
14
|
+
|
15
|
+
``name_temp_dir: str`` - should be a string representing the name of the temporary directory to be created. If it is empty, the ``temp`` value will be used as the default directory name.
|
16
|
+
|
17
|
+
Return:
|
18
|
+
----------
|
19
|
+
>>> type:dict
|
20
|
+
* 'success': bool - represents case the action was performed successfully
|
21
|
+
* 'path_created': str - path of the directory that was created on the process
|
22
|
+
|
23
|
+
Description: pt-br
|
24
|
+
----------
|
25
|
+
Função responsavel por criar diretório temporário para trabalhar com arquivos e etc. \n
|
26
|
+
|
27
|
+
Parametros:
|
28
|
+
----------
|
29
|
+
``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.
|
30
|
+
|
31
|
+
``name_temp_dir: str`` - deve ser uma string representando o nome do diretório temporário a ser criado. Se estiver vazio, o valor ``temp`` será usado como o nome padrão do diretório.
|
32
|
+
|
33
|
+
Retorno:
|
34
|
+
----------
|
35
|
+
>>> type:dict
|
36
|
+
* 'success': bool - representa se ação foi realizada com sucesso
|
37
|
+
* 'path_created': str - path do diretório que foi criado no processo
|
38
|
+
"""
|
39
|
+
|
40
|
+
# Local Variables
|
41
|
+
result: dict = {
|
42
|
+
'success': bool,
|
43
|
+
'path_created': str,
|
44
|
+
}
|
45
|
+
|
46
|
+
try:
|
47
|
+
# by 'default', defines path to local script execution path
|
48
|
+
if path_to_create == 'default':
|
49
|
+
path_to_create: str = os.getcwd()
|
50
|
+
|
51
|
+
# Build path to new dir
|
52
|
+
full_path: str = os.path.join(path_to_create, name_temp_dir)
|
53
|
+
|
54
|
+
# Create dir in this block
|
55
|
+
try:
|
56
|
+
|
57
|
+
# Successefully created
|
58
|
+
os.makedirs(full_path, exist_ok=False)
|
59
|
+
|
60
|
+
result['success'] = True
|
61
|
+
result['path_created'] = fr'{full_path}'
|
62
|
+
|
63
|
+
success_print(f"Diretório:'{full_path}' foi criado com sucesso.")
|
64
|
+
|
65
|
+
except FileExistsError:
|
66
|
+
result['success'] = False
|
67
|
+
result['path_created'] = None
|
68
|
+
alert_print(f"Diretório:'{full_path}' já existe.")
|
69
|
+
|
70
|
+
except PermissionError:
|
71
|
+
result['success'] = False
|
72
|
+
result['path_created'] = None
|
73
|
+
alert_print(f"Permissão negada: não é possível criar o diretório '{full_path}'.")
|
74
|
+
|
75
|
+
except Exception as e:
|
76
|
+
result['success'] = False
|
77
|
+
result['path_created'] = None
|
78
|
+
error_print(f'Error capturing current path to create temporary directory! Error: {str(e)}')
|
79
|
+
|
80
|
+
finally:
|
81
|
+
return result
|
82
|
+
|
83
|
+
|
84
|
+
def delete_temp_dir(path_to_delete: str = 'default', name_temp_dir: str='temp', delete_files: bool = False) -> dict[str, Union[bool, str, None]]:
|
85
|
+
|
86
|
+
"""
|
87
|
+
Function responsible for deleting a temporary directory. \n
|
88
|
+
|
89
|
+
Parameters:
|
90
|
+
----------
|
91
|
+
``path_to_delete: str`` - should be a string with the full path pointing to the folder where the temporary folder should be deleted, if it is empty the ``default`` value will be used which will delete a folder in the current directory where the file containing this function was called.
|
92
|
+
|
93
|
+
``name_temp_dir: str`` - should be a string representing the name of the temporary directory to be deleted. If it is empty, the ``temp`` value will be used as the default directory name.
|
94
|
+
|
95
|
+
``delete_files: bool`` - should be a boolean indicating whether to delete files in the directory. If it is False, files in the directory will not be deleted.
|
96
|
+
|
97
|
+
Return:
|
98
|
+
----------
|
99
|
+
>>> type:dict
|
100
|
+
* 'success': bool - represents case the action was performed successfully
|
101
|
+
* 'path_deleted': str - path of the directory that was deleted on the process
|
102
|
+
|
103
|
+
Description: pt-br
|
104
|
+
----------
|
105
|
+
Função responsavel por deletar diretório temporário. \n
|
106
|
+
|
107
|
+
Parametros:
|
108
|
+
----------
|
109
|
+
``path_to_delete: str`` - deve ser uma string com o path completo apontando para a pasta onde deve ser deletada a pasta temporaria, se estiver vazio sera usado valor ``default`` que deletará pasta no diretório atual onde o arquivo contendo esta função foi chamada.
|
110
|
+
|
111
|
+
``name_temp_dir: str`` - deve ser uma string representando o nome do diretório temporário a ser deletado. Se estiver vazio, o valor ``temp`` será usado como o nome padrão do diretório.
|
112
|
+
|
113
|
+
``delete_files: bool`` - deve ser um booleano indicando se deve deletar arquivos no diretório. Se for False, arquivos no diretório não serão deletados.
|
114
|
+
|
115
|
+
Retorno:
|
116
|
+
----------
|
117
|
+
>>> type:dict
|
118
|
+
* 'success': bool - representa se ação foi realizada com sucesso
|
119
|
+
* 'path_deleted': str - path do diretório que foi deletado no processo
|
120
|
+
"""
|
121
|
+
|
122
|
+
# Local Variables
|
123
|
+
result: dict = {
|
124
|
+
'success': bool,
|
125
|
+
'path_deleted': str,
|
126
|
+
}
|
127
|
+
|
128
|
+
try:
|
129
|
+
# by 'default', defines path to local script execution path
|
130
|
+
if path_to_delete == 'default':
|
131
|
+
path_to_delete: str = os.getcwd()
|
132
|
+
|
133
|
+
# Build path to new dir
|
134
|
+
full_path: str = os.path.join(path_to_delete, name_temp_dir)
|
135
|
+
|
136
|
+
# Delete dir in this block
|
137
|
+
try:
|
138
|
+
|
139
|
+
# Check if directory exists
|
140
|
+
if os.path.exists(full_path):
|
141
|
+
|
142
|
+
# Check if delete_files is True
|
143
|
+
if delete_files:
|
144
|
+
# Delete all files in the directory
|
145
|
+
shutil.rmtree(full_path)
|
146
|
+
|
147
|
+
else:
|
148
|
+
# Delete the directory only
|
149
|
+
os.rmdir(full_path)
|
150
|
+
|
151
|
+
result['success'] = True
|
152
|
+
result['path_deleted'] = fr'{full_path}'
|
153
|
+
|
154
|
+
success_print(f"Diretório:'{full_path}' foi deletado com sucesso.")
|
155
|
+
else:
|
156
|
+
result['success'] = False
|
157
|
+
result['path_deleted'] = None
|
158
|
+
alert_print(f"Diretório:'{full_path}' não existe.")
|
159
|
+
|
160
|
+
except PermissionError:
|
161
|
+
result['success'] = False
|
162
|
+
result['path_deleted'] = None
|
163
|
+
alert_print(f"Permissão negada: não é possível deletar o diretório '{full_path}'.")
|
164
|
+
|
165
|
+
except Exception as e:
|
166
|
+
result['success'] = False
|
167
|
+
result['path_deleted'] = None
|
168
|
+
error_print(f'Error capturing current path to delete temporary directory! Error: {str(e)}')
|
169
|
+
|
170
|
+
finally:
|
171
|
+
return result
|
@@ -4,7 +4,7 @@ from loguru import logger
|
|
4
4
|
def logging_decorator(
|
5
5
|
fn: Callable
|
6
6
|
) -> Callable:
|
7
|
-
|
7
|
+
|
8
8
|
"""
|
9
9
|
Function responsible for displaying log message in the console for functions that are called. \n
|
10
10
|
Displays function name, and the result of the function in case of return, without return returns None.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from colorama import Fore
|
1
|
+
from colorama import Fore
|
2
2
|
|
3
3
|
# Windows bash colors
|
4
4
|
class Colors():
|
@@ -18,29 +18,30 @@ class Colors():
|
|
18
18
|
def success_print(string_text: str, color=Colors.green, ending="\n") -> None:
|
19
19
|
"""
|
20
20
|
Print that indicates ``SUCCESS``. Customized with the color Green \n
|
21
|
-
|
21
|
+
|
22
22
|
Return:
|
23
23
|
----------
|
24
24
|
>>> type:None
|
25
|
-
|
25
|
+
|
26
26
|
pt-br
|
27
27
|
----------
|
28
28
|
Print que indica ``SUCESSO``. Personalizado com a cor Verde \n
|
29
|
-
|
29
|
+
|
30
30
|
Retorno:
|
31
31
|
----------
|
32
32
|
>>> type:None
|
33
33
|
"""
|
34
|
-
|
34
|
+
print(f'{color} {string_text} {Colors.default}', end=ending)
|
35
|
+
|
35
36
|
|
36
37
|
def alert_print(string_text: str, color=Colors.yellow, ending="\n") -> None:
|
37
38
|
"""
|
38
39
|
Print that indicates ``ALERT``. Customized with the color Yellow \n
|
39
|
-
|
40
|
+
|
40
41
|
Return:
|
41
42
|
----------
|
42
43
|
>>> type:None
|
43
|
-
|
44
|
+
|
44
45
|
pt-br
|
45
46
|
----------
|
46
47
|
Print que indica ``ALERTA``. Personalizado com a cor Amarelo \n
|
@@ -48,16 +49,17 @@ def alert_print(string_text: str, color=Colors.yellow, ending="\n") -> None:
|
|
48
49
|
----------
|
49
50
|
>>> type:None
|
50
51
|
"""
|
51
|
-
|
52
|
+
print(f'{color} {string_text} {Colors.default}', end=ending)
|
53
|
+
|
52
54
|
|
53
55
|
def info_print(string_text: str, color=Colors.cyan, ending="\n") -> None:
|
54
56
|
"""
|
55
57
|
Print that indicates ``INFORMATION``. Customized with the color Cyan \n
|
56
|
-
|
58
|
+
|
57
59
|
Return:
|
58
60
|
----------
|
59
61
|
>>> type:None
|
60
|
-
|
62
|
+
|
61
63
|
pt-br
|
62
64
|
----------
|
63
65
|
Print que indica ``INFORMATIVO``. Personalizado com a cor Ciano \n
|
@@ -65,16 +67,17 @@ def info_print(string_text: str, color=Colors.cyan, ending="\n") -> None:
|
|
65
67
|
----------
|
66
68
|
>>> type:None
|
67
69
|
"""
|
68
|
-
|
70
|
+
print(f'{color} {string_text} {Colors.default}', end=ending)
|
71
|
+
|
69
72
|
|
70
73
|
def error_print(string_text: str, color=Colors.red, ending="\n") -> None:
|
71
74
|
"""
|
72
75
|
Print that indicates ``ERROR``. Customized with the color Red \n
|
73
|
-
|
76
|
+
|
74
77
|
Return:
|
75
78
|
----------
|
76
79
|
>>> type:None
|
77
|
-
|
80
|
+
|
78
81
|
pt-br
|
79
82
|
----------
|
80
83
|
Print que indica ``ERRO``. Personalizado com a cor Vermelho \n
|
@@ -82,16 +85,17 @@ def error_print(string_text: str, color=Colors.red, ending="\n") -> None:
|
|
82
85
|
----------
|
83
86
|
>>> type:None
|
84
87
|
"""
|
85
|
-
|
88
|
+
print(f'{color} {string_text} {Colors.default}', end=ending)
|
89
|
+
|
86
90
|
|
87
91
|
def magenta_print(string_text: str, color=Colors.magenta, ending="\n") -> None:
|
88
92
|
"""
|
89
93
|
Print customized with the color Magenta \n
|
90
|
-
|
94
|
+
|
91
95
|
Return:
|
92
96
|
----------
|
93
97
|
>>> type:None
|
94
|
-
|
98
|
+
|
95
99
|
pt-br
|
96
100
|
----------
|
97
101
|
Print personalizado com a cor Magenta \n
|
@@ -99,16 +103,17 @@ def magenta_print(string_text: str, color=Colors.magenta, ending="\n") -> None:
|
|
99
103
|
----------
|
100
104
|
>>> type:None
|
101
105
|
"""
|
102
|
-
|
106
|
+
print(f'{color} {string_text} {Colors.default}', end=ending)
|
107
|
+
|
103
108
|
|
104
109
|
def blue_print(string_text: str, color=Colors.blue, ending="\n") -> None:
|
105
110
|
"""
|
106
111
|
Print customized with the color Blue \n
|
107
|
-
|
112
|
+
|
108
113
|
Return:
|
109
114
|
----------
|
110
115
|
>>> type:None
|
111
|
-
|
116
|
+
|
112
117
|
pt-br
|
113
118
|
----------
|
114
119
|
Print personalizado com a cor Azul \n
|
@@ -116,7 +121,8 @@ def blue_print(string_text: str, color=Colors.blue, ending="\n") -> None:
|
|
116
121
|
----------
|
117
122
|
>>> type:None
|
118
123
|
"""
|
119
|
-
|
124
|
+
print(f'{color} {string_text} {Colors.default}', end=ending)
|
125
|
+
|
120
126
|
|
121
127
|
def print_call_fn(string_text: str, color=Colors.call_fn, ending="\n") -> None:
|
122
128
|
"""
|
@@ -125,7 +131,7 @@ def print_call_fn(string_text: str, color=Colors.call_fn, ending="\n") -> None:
|
|
125
131
|
Return:
|
126
132
|
----------
|
127
133
|
>>> type:None
|
128
|
-
|
134
|
+
|
129
135
|
pt-br
|
130
136
|
----------
|
131
137
|
Print personalizado para log de chamada de função. \n
|
@@ -134,7 +140,8 @@ def print_call_fn(string_text: str, color=Colors.call_fn, ending="\n") -> None:
|
|
134
140
|
----------
|
135
141
|
>>> type:None
|
136
142
|
"""
|
137
|
-
|
143
|
+
print(f'{color} {string_text} {Colors.default}', end=ending)
|
144
|
+
|
138
145
|
|
139
146
|
def print_retur_fn(string_text: str, color=Colors.retur_fn, ending="\n") -> None:
|
140
147
|
"""
|
@@ -143,7 +150,7 @@ def print_retur_fn(string_text: str, color=Colors.retur_fn, ending="\n") -> None
|
|
143
150
|
Return:
|
144
151
|
----------
|
145
152
|
>>> type:None
|
146
|
-
|
153
|
+
|
147
154
|
pt-br
|
148
155
|
----------
|
149
156
|
Print personalizado para log de chamada de função. \n
|
@@ -152,4 +159,4 @@ def print_retur_fn(string_text: str, color=Colors.retur_fn, ending="\n") -> None
|
|
152
159
|
----------
|
153
160
|
>>> type:None
|
154
161
|
"""
|
155
|
-
|
162
|
+
print(f'{color} {string_text} {Colors.default}', end=ending)
|
@@ -3,9 +3,10 @@ from typing import Any
|
|
3
3
|
from rpa_suite.log.printer import error_print, success_print
|
4
4
|
|
5
5
|
def create_list_using_regex(origin_text: str, division_pattern: str) -> list[str] | Any:
|
6
|
+
|
6
7
|
"""
|
7
8
|
Function responsible for searching in a string ``origin_text`` a pattern ``division_pattern`` and dividing the original text into substrings generating a list of strings, also does the cleaning and treatment to keep the list with the original strings, but divided
|
8
|
-
|
9
|
+
|
9
10
|
Return:
|
10
11
|
----------
|
11
12
|
A list of strings divided by the pattern used in the argument passed as a parameter.
|
@@ -13,11 +14,12 @@ def create_list_using_regex(origin_text: str, division_pattern: str) -> list[str
|
|
13
14
|
Description: pt-br
|
14
15
|
----------
|
15
16
|
Função responsável por buscar em um texto de leitura humana uma string ``origin_text`` por um padrão ``division_pattern`` e dividir o texto original em substrings gerando uma lista de strings, também faz a limpeza e tratamento para manter a lista com as strings originais, porem dividas
|
16
|
-
|
17
|
+
|
17
18
|
Retorno:
|
18
19
|
----------
|
19
20
|
Uma lista de strings dividas pelo padrão utilizada no argumento passado como parametro.
|
20
21
|
"""
|
22
|
+
|
21
23
|
try:
|
22
24
|
# creates a delimiter and uses it to split the string based on the pattern
|
23
25
|
text_with_delim = re.sub(division_pattern, r'\1<DELIMITADOR>', origin_text)
|
@@ -33,11 +35,11 @@ def create_list_using_regex(origin_text: str, division_pattern: str) -> list[str
|
|
33
35
|
# Removes the delimiter \n both left and right from each element of the list
|
34
36
|
messages_striped = [msg.strip() for i, msg in enumerate(messages)]
|
35
37
|
messages_lstriped = [msg.lstrip() for msg in messages_striped]
|
36
|
-
|
38
|
+
|
37
39
|
# Removes the delimiter that has been placed between punctuation within the same pattern.
|
38
40
|
messages_final = [msg.replace('\n', ' ') for msg in messages_lstriped]
|
39
41
|
success_print(f'List generated successfully!')
|
40
42
|
return messages_final
|
41
|
-
|
43
|
+
|
42
44
|
except Exception as e:
|
43
|
-
|
45
|
+
error_print(f"Error when trying to create list using pattern-match (regex). Error: {str(e)}")
|
@@ -10,10 +10,10 @@ from .email.sender_smtp import send_email
|
|
10
10
|
|
11
11
|
"""MODULE FILE"""
|
12
12
|
from .file.counter import count_files
|
13
|
-
from .file.temp_dir import create_temp_dir,
|
13
|
+
from .file.temp_dir import create_temp_dir, delete_temp_dir
|
14
14
|
|
15
15
|
"""MODULE LOG"""
|
16
|
-
from .log.loggin import logging_decorator
|
16
|
+
# from .log.loggin import logging_decorator
|
17
17
|
from .log.printer import alert_print, success_print, error_print, info_print, print_call_fn, print_retur_fn, magenta_print, blue_print
|
18
18
|
|
19
19
|
"""MODULE REGEX"""
|
@@ -26,45 +26,46 @@ from .validate.string_validator import search_in
|
|
26
26
|
class Rpa_suite():
|
27
27
|
"""
|
28
28
|
The ``Rpa_suite`` class is a generic representation of the modules, with the aim of centralizing all submodules for access through an instance of this representational Object. It contains variables pointed to the functions of the submodules present in the rpa-site.
|
29
|
-
|
29
|
+
|
30
30
|
Call
|
31
31
|
----------
|
32
32
|
When calling the maintainer file of this class, an instance of this object will be invoked to be used or reused through another variable
|
33
|
-
|
33
|
+
|
34
34
|
Objective
|
35
35
|
----------
|
36
36
|
Flexibility being able to call each submodule individually or by importing the representational object of all submodules.
|
37
|
-
|
37
|
+
|
38
38
|
Description: pt-br
|
39
39
|
----------
|
40
40
|
Classe ``Rpa_suite`` é uma representação genérica do dos módulos, com objetivo de centralizar todos submódulos para acesso através de uma instância deste Objeto representacional. Ele contem variaveis apontadas para as funções dos submódulos presentes no rpa-site.
|
41
|
-
|
41
|
+
|
42
42
|
Chamada
|
43
43
|
----------
|
44
44
|
Ao chamar o arquivo mantenedor desta classe, sera invocada uma instancia deste objeto para poder ser utilziado ou reutilizado através de outra variável
|
45
|
-
|
45
|
+
|
46
46
|
Objetivo
|
47
47
|
----------
|
48
48
|
Flexibilidade podendo chamar cada submódulo de forma individual ou fazendo a importação do objeto representacional de todos submódulos.
|
49
49
|
"""
|
50
|
-
|
50
|
+
|
51
51
|
# clock
|
52
52
|
wait_for_exec = wait_for_exec
|
53
53
|
exec_and_wait = exec_and_wait
|
54
54
|
exec_at_hour = exec_at_hour
|
55
|
-
|
55
|
+
|
56
56
|
# date
|
57
57
|
get_hms = get_hms
|
58
58
|
get_dma = get_dma
|
59
|
-
|
59
|
+
|
60
60
|
# email
|
61
61
|
send_email = send_email
|
62
|
-
|
62
|
+
|
63
63
|
# file
|
64
64
|
count_files = count_files
|
65
65
|
create_temp_dir = create_temp_dir
|
66
|
-
|
67
|
-
|
66
|
+
delete_temp_dir = delete_temp_dir
|
67
|
+
#clear_temp_dir = clear_temp_dir
|
68
|
+
|
68
69
|
# log
|
69
70
|
alert_print = alert_print
|
70
71
|
success_print = success_print
|
@@ -74,18 +75,23 @@ class Rpa_suite():
|
|
74
75
|
print_retur_fn = print_retur_fn
|
75
76
|
magenta_print = magenta_print
|
76
77
|
blue_print = blue_print
|
77
|
-
|
78
|
+
|
78
79
|
# regex
|
79
80
|
create_list_using_regex = create_list_using_regex
|
80
|
-
|
81
|
+
|
81
82
|
# validate
|
82
83
|
valid_emails = valid_emails
|
83
84
|
search_in = search_in
|
84
|
-
|
85
|
+
|
85
86
|
# Create a instance of Rpa_suite
|
86
87
|
|
87
88
|
|
88
89
|
# Define function to return this instance
|
89
|
-
def invoke():
|
90
|
+
def invoke() -> Rpa_suite:
|
91
|
+
|
92
|
+
"""
|
93
|
+
Function responsible for return a object Rpa_suite with access all modules by .name_module or use 'from rpa_suite import suite' to >>> suite.functions_avaliable()
|
94
|
+
"""
|
95
|
+
|
90
96
|
suite = Rpa_suite()
|
91
97
|
return suite
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: rpa-suite
|
3
|
-
Version: 0.9.
|
3
|
+
Version: 0.9.4
|
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
|
@@ -134,11 +134,11 @@ O módulo principal do rpa-suite é dividido em categorias. Cada categoria cont
|
|
134
134
|
- **waiter** - Funções para aguardar em relação a execução de uma função, podendo ser antes ou depois
|
135
135
|
- **exec_at** - Funções para executar em momentos pré determinados
|
136
136
|
- **date**
|
137
|
-
- **date** - Funções para capturar data,
|
137
|
+
- **date** - Funções para capturar data, mês, ano, hora, minutos de forma individual em apenas uma linha
|
138
138
|
- **email**
|
139
139
|
- **sender_smtp** - Funções para envio de email SMPT
|
140
140
|
- **file**
|
141
|
-
- **counter** - Funções para
|
141
|
+
- **counter** - Funções para contagem de arquivos
|
142
142
|
- **temp_dir** - Funções para diretórios temporários
|
143
143
|
- **log**
|
144
144
|
- **loggin** - Funções decoradoras com log de execução das funções
|
@@ -150,7 +150,7 @@ O módulo principal do rpa-suite é dividido em categorias. Cada categoria cont
|
|
150
150
|
- **string_validator** - Funções para validação/varredura (strings, substrings, palavras)
|
151
151
|
|
152
152
|
## Release
|
153
|
-
Versão: **Alpha 0.9.
|
153
|
+
Versão: **Alpha 0.9.4**
|
154
154
|
|
155
155
|
Lançamento: *20/02/2024*
|
156
156
|
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
2
2
|
|
3
3
|
setup(
|
4
4
|
name='rpa_suite',
|
5
|
-
version='0.9.
|
5
|
+
version='0.9.4',
|
6
6
|
packages=find_packages(),
|
7
7
|
description='Conjunto de ferramentas essenciais para Automação RPA com Python, que facilitam o dia a dia de desenvolvimento.',
|
8
8
|
long_description_content_type='text/markdown',
|
@@ -1,161 +0,0 @@
|
|
1
|
-
import os, shutil
|
2
|
-
from rpa_suite.log.printer import error_print, alert_print, success_print
|
3
|
-
|
4
|
-
def create_temp_dir(path_to_create: str = 'default') -> dict:
|
5
|
-
|
6
|
-
"""
|
7
|
-
Function responsible for creating a temporary directory to work with files and etc. \n
|
8
|
-
|
9
|
-
Parameters:
|
10
|
-
----------
|
11
|
-
``path_to_create: str`` - should be a string with the full path pointing to the folder where the temporary 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.
|
12
|
-
|
13
|
-
Return:
|
14
|
-
----------
|
15
|
-
>>> type:dict
|
16
|
-
* 'success': bool - represents if the action was performed successfully
|
17
|
-
* 'path_created': str - path of the directory that was created in the process
|
18
|
-
|
19
|
-
Description: pt-br
|
20
|
-
----------
|
21
|
-
Função responsavel por criar diretório temporário para trabalhar com arquivos e etc. \n
|
22
|
-
|
23
|
-
Parametros:
|
24
|
-
----------
|
25
|
-
``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.
|
26
|
-
|
27
|
-
Retorno:
|
28
|
-
----------
|
29
|
-
>>> type:dict
|
30
|
-
* 'success': bool - representa se ação foi realizada com sucesso
|
31
|
-
* 'path_created': str - path do diretório que foi criado no processo
|
32
|
-
"""
|
33
|
-
|
34
|
-
# Local Variables
|
35
|
-
result: dict = {
|
36
|
-
'success': bool,
|
37
|
-
'path_created': str
|
38
|
-
}
|
39
|
-
|
40
|
-
# Preprocessing
|
41
|
-
default_dir: str
|
42
|
-
try:
|
43
|
-
if path_to_create == 'default':
|
44
|
-
default_dir = os.path.dirname(os.path.abspath(__file__))
|
45
|
-
else:
|
46
|
-
default_dir = fr'{path_to_create}'
|
47
|
-
except Exception as e:
|
48
|
-
result['success'] = False
|
49
|
-
error_print(f'Error capturing current path to create temporary directory! Error: {str(e)}')
|
50
|
-
|
51
|
-
# Process
|
52
|
-
try:
|
53
|
-
if not os.path.exists(fr'{default_dir}\temp'):
|
54
|
-
try:
|
55
|
-
os.mkdir(fr'{default_dir}\temp')
|
56
|
-
if os.path.exists(fr'{default_dir}\temp'):
|
57
|
-
result['success'] = True
|
58
|
-
success_print(fr'Directory created in: {default_dir}\temp')
|
59
|
-
else:
|
60
|
-
result['success'] = False
|
61
|
-
raise Exception
|
62
|
-
except Exception as e:
|
63
|
-
error_print(f'Unable to create temporary directory! Error: {str(e)}')
|
64
|
-
else:
|
65
|
-
result['success'] = True
|
66
|
-
alert_print(fr'NOTICE! directory already exists in: {default_dir}\temp ')
|
67
|
-
except Exception as e:
|
68
|
-
error_print(f'Error when trying to create temporary directory in: {default_dir} - Error: {str(e)}')
|
69
|
-
|
70
|
-
# Postprocessing
|
71
|
-
result['path_created'] = fr'{default_dir}\temp'
|
72
|
-
|
73
|
-
return result
|
74
|
-
|
75
|
-
|
76
|
-
def clear_temp_dir(path_to_clear: str = 'default', name_dir: str = '') -> dict:
|
77
|
-
|
78
|
-
"""
|
79
|
-
Function responsible for cleaning the temporary directory at the specified path. \n
|
80
|
-
|
81
|
-
Parameters:
|
82
|
-
----------
|
83
|
-
``path_to_cleaned: str`` - a string that points to the destination to be cleaned, which can be: \n
|
84
|
-
- relative path - based on the file where this function is being called
|
85
|
-
- absolute path - based on the local disk of the machine or server
|
86
|
-
|
87
|
-
If not declared or if the argument is left empty, then the ``default`` value will be used, which will search for the folder in the current directory where the file containing this function was called.
|
88
|
-
|
89
|
-
Return:
|
90
|
-
----------
|
91
|
-
>>> type:dict
|
92
|
-
* 'success': bool - represents if the action was performed successfully
|
93
|
-
* 'path_cleaned': str - path of the directory that was cleaned in the process
|
94
|
-
|
95
|
-
Description: pt-br
|
96
|
-
----------
|
97
|
-
Função responsavel por limpar o diretório temporário no caminho especificado. \n
|
98
|
-
|
99
|
-
Parametros:
|
100
|
-
----------
|
101
|
-
``path_to_cleaned: str`` - uma string que aponta para o destino a limpar podendo ser: \n
|
102
|
-
- caminho relativo - com base no arquivo onde esta sendo chamada a função
|
103
|
-
- caminho absoluto - com base no disco local da maquina ou servidor
|
104
|
-
|
105
|
-
não declarar ou deixar o argumento vazio então será usado valor ``default`` que buscará a pasta no diretório atual onde o arquivo contendo esta função foi chamada.
|
106
|
-
|
107
|
-
Retorno:
|
108
|
-
----------
|
109
|
-
>>> type:dict
|
110
|
-
* 'success': bool - representa se ação foi realizada com sucesso
|
111
|
-
* 'path_cleaned': str - path do diretório que foi executada limpeza no processo
|
112
|
-
"""
|
113
|
-
|
114
|
-
# Local Variables
|
115
|
-
temp_dir_result: dict = {
|
116
|
-
'success': bool,
|
117
|
-
'path_cleaned': str
|
118
|
-
}
|
119
|
-
|
120
|
-
# Preprocessing
|
121
|
-
default_dir: str
|
122
|
-
personal_name_dir_clear: str = 'temp' if name_dir == '' else name_dir
|
123
|
-
|
124
|
-
# Process
|
125
|
-
try:
|
126
|
-
if path_to_clear == 'default':
|
127
|
-
default_dir = os.path.dirname(os.path.abspath(__file__))
|
128
|
-
else:
|
129
|
-
default_dir = fr'{path_to_clear}'
|
130
|
-
except Exception as e:
|
131
|
-
temp_dir_result['success'] = False
|
132
|
-
error_print(f'Unable to capture current path to clear temporary folder! Error: {str(e)}')
|
133
|
-
|
134
|
-
try:
|
135
|
-
if os.path.exists(fr'{default_dir}/{personal_name_dir_clear}'):
|
136
|
-
for root, dirs, files in os.walk(fr'{default_dir}\{personal_name_dir_clear}', topdown=False):
|
137
|
-
for name in files:
|
138
|
-
try:
|
139
|
-
os.remove(os.path.join(root, name))
|
140
|
-
except:
|
141
|
-
pass
|
142
|
-
for name in dirs:
|
143
|
-
try:
|
144
|
-
os.rmdir(os.path.join(root, name))
|
145
|
-
except:
|
146
|
-
pass
|
147
|
-
temp_dir_result['success'] = True
|
148
|
-
success_print(fr'Directory cleaned: "{default_dir}\{personal_name_dir_clear}"')
|
149
|
-
else:
|
150
|
-
temp_dir_result['success'] = False
|
151
|
-
temp_dir_result['path_cleaned'] = None
|
152
|
-
alert_print(fr'Directory does not exist: "{default_dir}\{personal_name_dir_clear}"')
|
153
|
-
|
154
|
-
except Exception as e:
|
155
|
-
error_print(fr'Error when trying to clear temporary directory: "{default_dir}\{personal_name_dir_clear}" - Error: {str(e)}')
|
156
|
-
|
157
|
-
# Postprocessing
|
158
|
-
if temp_dir_result['success']:
|
159
|
-
temp_dir_result['path_cleaned'] = fr'{default_dir}\{personal_name_dir_clear}'
|
160
|
-
|
161
|
-
return temp_dir_result
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|