csc-cia-stne 0.0.43__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,29 @@
1
+ import os
2
+ import shutil
3
+
4
+ def recriar_pasta(caminho_pasta):
5
+ """
6
+ Remove a pasta existente, se houver, e cria uma nova pasta no caminho especificado.
7
+ Args:
8
+ caminho_pasta (str): O caminho da pasta a ser recriada.
9
+ Returns:
10
+ tuple: Uma tupla contendo um valor booleano indicando se a operação foi bem-sucedida e uma mensagem de erro em caso de falha.
11
+ Examples:
12
+ >>> recriar_pasta('/caminho/para/pasta')
13
+ (True, None)
14
+ """
15
+
16
+ try:
17
+
18
+ # Se a pasta já existir, remove-a
19
+ if os.path.exists(caminho_pasta) and os.path.isdir(caminho_pasta):
20
+ shutil.rmtree(caminho_pasta) # Deleta a pasta e todo o conteúdo
21
+
22
+ # Cria a pasta novamente
23
+ os.makedirs(caminho_pasta)
24
+ return True, None
25
+
26
+ except Exception as e:
27
+
28
+ return False, e
29
+
@@ -0,0 +1,66 @@
1
+ import yaml
2
+ import os
3
+ import sys
4
+
5
+
6
+ def get_config(file_path:str="settings.yaml",file_path_local:str=None,prod:bool=False) -> dict:
7
+ """
8
+ Retorna as configurações carregadas a partir de um arquivo YAML.
9
+ Parâmetros:
10
+ - file_path (str): O caminho do arquivo YAML.
11
+ - file_path_local (str, opcional): O caminho local do arquivo YAML, caso exista.
12
+ - prod (bool, opcional): Indica se as configurações de produção devem ser carregadas.
13
+ Retorna:
14
+ - dict: Um dicionário contendo as configurações carregadas do arquivo YAML.
15
+ Lança:
16
+ - FileNotFoundError: Caso o arquivo especificado não seja encontrado.
17
+ - Exception: Caso ocorra algum erro ao carregar as configurações.
18
+ Exemplo de uso:
19
+ config = get_config('/path/to/config.yaml', prod=True)
20
+ """
21
+
22
+ # Essa validação serve apenas para que continue funcionando mesmo se for dentro de um executavel
23
+
24
+ file_path = os.path.join(os.getcwd(), file_path)
25
+
26
+ try:
27
+
28
+ base_path = sys._MEIPASS
29
+
30
+ except:
31
+
32
+ base_path = os.path.abspath(".")
33
+
34
+ if os.path.exists(file_path):
35
+
36
+ file_place = os.path.join(base_path, file_path)
37
+
38
+ elif file_path_local is not None:
39
+
40
+ file_path_local = os.path.join(os.getcwd(), file_path_local)
41
+
42
+ file_place = os.path.join(base_path, file_path_local)
43
+
44
+ else:
45
+
46
+ raise FileNotFoundError(f"Arquivo '{file_path}' não encontrado.")
47
+
48
+ try:
49
+
50
+ with open(file_place, 'r', encoding='utf-8') as f:
51
+
52
+ config = yaml.safe_load(f)
53
+
54
+ if prod:
55
+
56
+ config['env'] = config['prod']
57
+
58
+ else:
59
+
60
+ config['env'] = config['prod']
61
+
62
+ return config
63
+
64
+ except Exception as e:
65
+
66
+ raise(e)
@@ -0,0 +1,141 @@
1
+ import os
2
+ from datetime import datetime
3
+ from rich import print
4
+ from rich.panel import Panel
5
+ from rich.style import Style
6
+ import logging
7
+ from pydantic import BaseModel
8
+ from pydantic import ValidationError, field_validator
9
+
10
+ # Classe para validar - titulo
11
+ class TituloSettings(BaseModel):
12
+ """
13
+ Classe que define as configurações do título do projeto.
14
+ Atributos:
15
+ - project_name (str): O nome do projeto.
16
+ - project_version (str): A versão do projeto.
17
+ - project_dev_name (str): O nome do desenvolvedor do projeto.
18
+ - project_dev_mail (str): O e-mail do desenvolvedor do projeto.
19
+ Métodos:
20
+ - check_non_empty_string(value, info): Método de validação para garantir que nenhum campo seja uma string vazia.
21
+ """
22
+
23
+ # Titulo
24
+ project_name: str
25
+ project_version: str
26
+ project_dev_name: str
27
+ project_dev_mail: str
28
+ # Validador para garantir que nenhum campo seja uma string vazia
29
+ """
30
+ Método de validação para garantir que nenhum campo seja uma string vazia.
31
+ Parâmetros:
32
+ - value: O valor do campo a ser validado.
33
+ - info: Informações sobre o campo a ser validado.
34
+ Retorna:
35
+ - O valor do campo se for uma string não vazia.
36
+ Lança:
37
+ - ValueError: Se o valor do campo for uma string vazia.
38
+ Exemplo de uso:
39
+ ```
40
+ settings = TituloSettings()
41
+ settings.check_non_empty_string("GitHub Copilot", "project_name")
42
+ ```
43
+ """
44
+ @field_validator('project_name', 'project_version', 'project_dev_name', 'project_dev_mail')
45
+ def check_non_empty_string(cls, value, info):
46
+ if not isinstance(value, str) or not value.strip():
47
+
48
+ raise ValueError(f"O parâmetro '{info.field_name}' deve ser uma string não vazia.")
49
+
50
+ return value
51
+
52
+
53
+ # Retorna data de modificação
54
+ def last_modified()->datetime:
55
+ """
56
+ Retorna a data da última atualização do script
57
+
58
+ """
59
+ base_dir = os.path.abspath(os.getcwd())
60
+
61
+ newest_date = None
62
+
63
+ for root, _, files in os.walk(base_dir):
64
+
65
+ for file in files:
66
+
67
+ if file.endswith('.py'):
68
+
69
+ file_path = os.path.join(root, file)
70
+ file_modification_date = os.path.getmtime(file_path)
71
+
72
+ if newest_date is None or file_modification_date > newest_date:
73
+
74
+ newest_date = file_modification_date
75
+
76
+ # Converter o timestamp para um objeto datetime
77
+ last_modified_date = datetime.fromtimestamp(newest_date)
78
+ last_modified_date = last_modified_date.strftime("%Y%m%d")
79
+
80
+ return last_modified_date
81
+
82
+ def titulo(project_name:str,project_version:str,project_dev_name:str,project_dev_mail:str):
83
+ """
84
+ Gera um título formatado para exibição do projeto.
85
+ Args:
86
+ project_name (str): Nome do projeto.
87
+ project_version (str): Versão do projeto.
88
+ project_dev_name (str): Nome do desenvolvedor do projeto.
89
+ project_dev_mail (str): E-mail do desenvolvedor do projeto.
90
+ Raises:
91
+ ValueError: Caso alguma variável obrigatória esteja ausente no arquivo .env ou nas variáveis de ambiente da máquina.
92
+ Example:
93
+ >>> titulo("Meu Projeto", "1.0", "João", "joao@example.com")
94
+ [Exemplo de saída]
95
+ """
96
+
97
+ try:
98
+ settings = TituloSettings(project_name=project_name,project_version=project_version,project_dev_name=project_dev_name,project_dev_mail=project_dev_mail)
99
+ #return settings
100
+
101
+ except ValidationError as e:
102
+ # Extrair os detalhes da exceção
103
+ errors = e.errors()
104
+ missing_vars = [error['loc'][0] for error in errors if error['type'] == 'missing']
105
+
106
+ # Criar uma mensagem personalizada
107
+ if missing_vars:
108
+ missing_vars_str = ', '.join(missing_vars)
109
+ raise ValueError(
110
+ f"As seguintes variáveis obrigatórias estão ausentes no arquivo .env ou nas variáveis de ambiente da máquina, impossibi: {missing_vars_str}"
111
+ )
112
+
113
+
114
+ if os.getenv('ambiente_de_execucao') is None or os.getenv('ambiente_de_execucao') != "karavela":
115
+
116
+ estilo_box = Style(bold=True)
117
+ print(
118
+ Panel(
119
+ f"""
120
+ [bold chartreuse3]CIA [bold white]| [bold chartreuse3]Centro de Inteligência e Automação [bold white]([bold chartreuse3]cia@stone.com.br[bold white])[bold green]\n
121
+ Projeto[bold white]: [bold green]{project_name}\n
122
+ Versão[bold white]: [bold green]{project_version}\n
123
+ Dev[bold white]: [bold green]{project_dev_name} [bold white]([bold green]{project_dev_mail}[bold white])[bold green]\n
124
+ Última atualização[bold white]: [bold green]{last_modified()}
125
+ """,
126
+ title="Stone",
127
+ subtitle="CSC-CIA",
128
+ style=estilo_box,
129
+ border_style="bold chartreuse3"
130
+ )
131
+ )
132
+
133
+ else:
134
+
135
+ logging.info("CSC | CIA - Centro de Inteligência e Automação")
136
+ logging.info(f"Projeto: {project_name}")
137
+ logging.info(f"\tVersão: {project_version} (Última modificação: {last_modified()})")
138
+ logging.info("\tTime: CIA <cia@stone.com.br>")
139
+ logging.info(f"\tDesenvolvedor: {project_dev_name} <{project_dev_mail}>")
140
+ logging.info("-")
141
+
@@ -0,0 +1,133 @@
1
+ from pydantic import BaseModel, field_validator, model_validator
2
+
3
+ class InitParamsValidator(BaseModel):
4
+ limit:int
5
+ id_project:str
6
+ creds_dict:dict
7
+ creds_file:str
8
+
9
+ @field_validator('limit')
10
+ def check_input_basic(cls, value, info):
11
+ if not isinstance(value, int):
12
+ raise ValueError(f"O parametro 'limit' deve ser um inteiro e não um {type(value)}")
13
+
14
+ return value
15
+
16
+ @field_validator('id_project')
17
+ def check_str_input(cls, value, info):
18
+ if not isinstance(value, str) or not value.strip():
19
+ raise ValueError(f"O parametro 'id_project' deve ser uma string e não um {type(value)} e não vazio")
20
+ return value
21
+
22
+ @model_validator(mode="after")
23
+ def check_others_input(cls, model):
24
+ creds_dict = model.creds_dict
25
+ creds_file = model.creds_file
26
+
27
+ if isinstance(creds_dict, dict):
28
+ return model
29
+
30
+ elif isinstance(creds_file, str) and creds_file.strip():
31
+ return model
32
+
33
+ else:
34
+ raise ValueError("Pelo menos um dos parâmetros 'creds_dict' ou 'creds_file' deve ser fornecido.")
35
+
36
+
37
+ class tryQueryValidator(BaseModel):
38
+
39
+ query_to_execute:str
40
+ organize:bool
41
+ use_legacy:bool
42
+ use_cache:bool
43
+ query_parameters:list
44
+
45
+ @field_validator('query_to_execute')
46
+ def check_str_input(cls, value, info):
47
+ if not isinstance(value, str) or not value.strip():
48
+ raise ValueError(f"O parametro '{info.field_name}' deve ser uma string não vazia")
49
+
50
+ return value
51
+
52
+ @field_validator('organize','use_legacy','use_cache')
53
+ def check_bool_input(cls, value, info):
54
+ if not isinstance(value, bool):
55
+ raise ValueError(f"O parametro '{info.field_name}' deve ser um boleano")
56
+
57
+ return value
58
+
59
+ @field_validator('query_parameters')
60
+ def check_list_input(cls, value, info):
61
+ if not isinstance(value, list):
62
+ raise ValueError(f"O parametro '{info.field_name}' deve ser uma lista")
63
+
64
+ return value
65
+
66
+
67
+ class tryInsertListValidator(BaseModel):
68
+ """
69
+ Classe de validação para o modelo tryInsertListValidator.
70
+ Atributos:
71
+ - insert_limit (int): Limite de inserção.
72
+ - list_to_insert (list): Lista a ser inserida.
73
+ - table (str): Nome da tabela.
74
+ Métodos:
75
+ - check_list_input(value, info): Valida se o valor fornecido para 'list_to_insert' é uma lista não vazia.
76
+ - check_str_input(value, info): Valida se o valor fornecido para 'table' é uma string não vazia.
77
+ - check_int_input(value, info): Valida se o valor fornecido para 'insert_limit' é um inteiro não maior que 10000.
78
+ """
79
+
80
+ insert_limit:int
81
+ list_to_insert:list
82
+ table:str
83
+
84
+ """
85
+ Valida se o valor fornecido para 'list_to_insert' é uma lista não vazia.
86
+ Parâmetros:
87
+ - value: O valor a ser validado.
88
+ - info: Informações adicionais sobre o campo.
89
+ Retorna:
90
+ - O valor fornecido, se for uma lista não vazia.
91
+ Lança:
92
+ - ValueError: Se o valor não for uma lista ou estiver vazio.
93
+ """
94
+ @field_validator('list_to_insert')
95
+ def check_list_input(cls, value, info):
96
+ if not isinstance(value, list) and len(value) > 0:
97
+ raise ValueError(f"O parametro '{info.field_name}' deve ser uma lista e não estar vazia")
98
+
99
+ return value
100
+
101
+ """
102
+ Valida se o valor fornecido para 'table' é uma string não vazia.
103
+ Parâmetros:
104
+ - value: O valor a ser validado.
105
+ - info: Informações adicionais sobre o campo.
106
+ Retorna:
107
+ - O valor fornecido, se for uma string não vazia.
108
+ Lança:
109
+ - ValueError: Se o valor não for uma string ou estiver vazio.
110
+ """
111
+ @field_validator('table')
112
+ def check_str_input(cls, value, info):
113
+ if not isinstance(value, str) or not value.strip():
114
+ raise ValueError(f"O parametro '{info.field_name}' deve ser uma string não vazia")
115
+
116
+ return value
117
+
118
+ """
119
+ Valida se o valor fornecido para 'insert_limit' é um inteiro não maior que 10000.
120
+ Parâmetros:
121
+ - value: O valor a ser validado.
122
+ - info: Informações adicionais sobre o campo.
123
+ Retorna:
124
+ - O valor fornecido, se for um inteiro não maior que 10000.
125
+ Lança:
126
+ - ValueError: Se o valor não for um inteiro ou for maior que 10000.
127
+ """
128
+ @field_validator('insert_limit')
129
+ def check_int_input(cls, value, info):
130
+ if not isinstance(value, int) or value > 10000:
131
+ raise ValueError(f"O parametro '{info.field_name}' deve ser um inteiro não maior que 10000")
132
+
133
+ return value
@@ -0,0 +1,144 @@
1
+
2
+ from pydantic import BaseModel, field_validator, EmailStr
3
+
4
+ class InitParamsValidator(BaseModel):
5
+ """
6
+ Classe responsável por validar os parâmetros de inicialização.
7
+ Atributos:
8
+ - key (str): A chave de autenticação.
9
+ - with_subject (str): O assunto da autenticação.
10
+ - scopes (list): A lista de escopos.
11
+ - version (str): A versão.
12
+ Métodos:
13
+ - check_str_input(cls, value, info): Valida se o valor é uma string não vazia.
14
+ - check_list_input(cls, value, info): Valida se o valor é uma lista.
15
+ """
16
+
17
+ token: dict
18
+ with_subject: EmailStr
19
+ scopes : list
20
+ version : str
21
+
22
+ """
23
+ Valida se o valor é uma string não vazia.
24
+ Parâmetros:
25
+ - value (Any): O valor a ser validado.
26
+ - info (FieldInfo): Informações sobre o campo.
27
+ Retorna:
28
+ - value (Any): O valor validado.
29
+ Lança:
30
+ - ValueError: Se o valor não for uma string ou estiver vazio.
31
+ """
32
+ @field_validator("version")
33
+ def check_str_input(cls, value, info):
34
+ if not isinstance(value, str) or not value.strip():
35
+ raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
36
+ return value
37
+
38
+ @field_validator('token')
39
+ def check_dict_input(cls, value, info):
40
+ if not isinstance(value, dict):
41
+ raise ValueError(f"O campo '{info.field_name}' deve ser um dicionário e não {type(value)}")
42
+ return value
43
+
44
+ """
45
+ Valida se o valor é uma lista.
46
+ Parâmetros:
47
+ - value (Any): O valor a ser validado.
48
+ - info (FieldInfo): Informações sobre o campo.
49
+ Retorna:
50
+ - value (Any): O valor validado.
51
+ Lança:
52
+ - ValueError: Se o valor não for uma lista.
53
+ """
54
+ @field_validator('scopes')
55
+ def check_list_input(cls, value, info):
56
+ if not isinstance(value, list):
57
+ raise ValueError(f"O parametro '{info.field_name}' deve ser uma lista")
58
+
59
+ return value
60
+
61
+ class CreateFolderValidator(BaseModel):
62
+ """
63
+ Validação para a criação de uma pasta no Google Drive.
64
+ Atributos:
65
+ - name (str): O nome da pasta a ser criada.
66
+ - parent_folder_id (str): O ID da pasta pai onde a nova pasta será criada.
67
+ Métodos:
68
+ - check_str_input(value, info): Valida se o valor fornecido é uma string não vazia.
69
+ """
70
+ name: str
71
+ parent_folder_id: str
72
+
73
+ """
74
+ Valida se o valor fornecido é uma string não vazia.
75
+ Parâmetros:
76
+ - value: O valor a ser validado.
77
+ - info: Informações sobre o campo sendo validado.
78
+ Retorna:
79
+ - O valor fornecido, se for uma string não vazia.
80
+ Lança:
81
+ - ValueError: Se o valor não for uma string ou for uma string vazia.
82
+ """
83
+ @field_validator('name','parent_folder_id')
84
+ def check_str_input(cls, value, info):
85
+ if not isinstance(value, str) or not value.strip():
86
+ raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
87
+ return value
88
+
89
+ class ListFolderValidator(BaseModel):
90
+ """
91
+ Validação para a classe ListFolderValidator.
92
+
93
+ Atributos:
94
+ - query (str): A consulta a ser realizada.
95
+ - spaces (str): Os espaços a serem considerados.
96
+ - fields (str): Os campos a serem retornados.
97
+
98
+ Métodos:
99
+ - check_str_input(cls, value, info): Valida se o valor fornecido é uma string não vazia.
100
+
101
+ """
102
+
103
+ query: str
104
+ fields: str
105
+ spaces: str
106
+
107
+ """
108
+ Valida se o valor fornecido é uma string não vazia.
109
+
110
+ Parâmetros:
111
+ - value (Any): O valor a ser validado.
112
+ - info (FieldInfo): Informações sobre o campo.
113
+
114
+ Retorna:
115
+ - value (Any): O valor validado.
116
+
117
+ Lança:
118
+ - ValueError: Se o valor não for uma string ou for uma string vazia.
119
+
120
+ """
121
+ @field_validator('query','spaces','fields')
122
+ def check_str_input(cls, value, info):
123
+ if not isinstance(value, str) or not value.strip():
124
+ raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
125
+ return value
126
+
127
+ class UploadValidator(BaseModel):
128
+ """
129
+ Validador para upload de arquivo no Google Drive.
130
+
131
+ Atributos:
132
+ - file_path (str): Caminho do arquivo a ser enviado.
133
+
134
+ """
135
+ folder_id: str
136
+ name: str
137
+ file_path: str
138
+ mimetype: str
139
+
140
+ @field_validator('folder_id','name','file_path', 'mimetype')
141
+ def check_str_input(cls, value, info):
142
+ if not isinstance(value, str) or not value.strip():
143
+ raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
144
+ return value