csc-cia-stne 0.0.43__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,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