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.
- csc_cia_stne/__init__.py +89 -0
- csc_cia_stne/bc_correios.py +529 -0
- csc_cia_stne/bc_sta.py +416 -0
- csc_cia_stne/email.py +239 -0
- csc_cia_stne/gcp_bigquery.py +224 -0
- csc_cia_stne/google_drive.py +268 -0
- csc_cia_stne/karavela.py +135 -0
- csc_cia_stne/logger_json.py +92 -0
- csc_cia_stne/logger_rich.py +249 -0
- csc_cia_stne/provio.py +103 -0
- csc_cia_stne/servicenow.py +689 -0
- csc_cia_stne/slack.py +227 -0
- csc_cia_stne/stne_admin.py +597 -0
- csc_cia_stne/utilitarios/__init__.py +9 -0
- csc_cia_stne/utilitarios/functions/__init__.py +14 -0
- csc_cia_stne/utilitarios/functions/func_b64.py +50 -0
- csc_cia_stne/utilitarios/functions/func_converters.py +18 -0
- csc_cia_stne/utilitarios/functions/func_recriar_pastas.py +29 -0
- csc_cia_stne/utilitarios/functions/func_settings.py +66 -0
- csc_cia_stne/utilitarios/functions/func_titulo.py +141 -0
- csc_cia_stne/utilitarios/validations/GcpBigQueryValidator.py +133 -0
- csc_cia_stne/utilitarios/validations/GoogleDriveValidator.py +144 -0
- csc_cia_stne/utilitarios/validations/ServiceNowValidator.py +403 -0
- csc_cia_stne/utilitarios/validations/__init__.py +3 -0
- csc_cia_stne-0.0.43.dist-info/LICENCE +21 -0
- csc_cia_stne-0.0.43.dist-info/METADATA +33 -0
- csc_cia_stne-0.0.43.dist-info/RECORD +29 -0
- csc_cia_stne-0.0.43.dist-info/WHEEL +5 -0
- csc_cia_stne-0.0.43.dist-info/top_level.txt +1 -0
@@ -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
|