csc-cia-stne 0.0.33__py3-none-any.whl → 0.0.35__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 +22 -6
- csc_cia_stne/bc_correios.py +13 -0
- csc_cia_stne/bc_sta.py +118 -1
- csc_cia_stne/email.py +97 -0
- csc_cia_stne/google_drive.py +49 -22
- csc_cia_stne/karavela.py +20 -8
- csc_cia_stne/logger_rich.py +7 -0
- csc_cia_stne/provio.py +39 -5
- csc_cia_stne/stne_admin.py +174 -0
- csc_cia_stne/utilitarios/__init__.py +1 -1
- csc_cia_stne/utilitarios/functions/__init__.py +2 -1
- csc_cia_stne/utilitarios/functions/func_recriar_pastas.py +10 -0
- csc_cia_stne/utilitarios/functions/func_settings.py +62 -0
- csc_cia_stne/utilitarios/functions/func_titulo.py +38 -1
- csc_cia_stne/utilitarios/validations/GcpBigQueryValidator.py +43 -1
- csc_cia_stne/utilitarios/validations/GoogleDriveValidator.py +82 -3
- csc_cia_stne/utilitarios/validations/ServiceNowValidator.py +210 -7
- {csc_cia_stne-0.0.33.dist-info → csc_cia_stne-0.0.35.dist-info}/METADATA +2 -1
- csc_cia_stne-0.0.35.dist-info/RECORD +28 -0
- csc_cia_stne-0.0.33.dist-info/RECORD +0 -27
- {csc_cia_stne-0.0.33.dist-info → csc_cia_stne-0.0.35.dist-info}/LICENCE +0 -0
- {csc_cia_stne-0.0.33.dist-info → csc_cia_stne-0.0.35.dist-info}/WHEEL +0 -0
- {csc_cia_stne-0.0.33.dist-info → csc_cia_stne-0.0.35.dist-info}/top_level.txt +0 -0
csc_cia_stne/stne_admin.py
CHANGED
@@ -121,6 +121,22 @@ class ReceiptIDValidator(BaseModel):
|
|
121
121
|
class StoneAdmin:
|
122
122
|
|
123
123
|
def __init__(self, client_id:str, user_agent:str, private_key:str, ambiente:str):
|
124
|
+
"""
|
125
|
+
Inicializa uma instância da classe STNEAdmin.
|
126
|
+
Parâmetros:
|
127
|
+
- client_id (str): O ID do cliente.
|
128
|
+
- user_agent (str): O agente do usuário.
|
129
|
+
- private_key (str): A chave privada.
|
130
|
+
- ambiente (str): O ambiente de execução ('prd' para produção ou qualquer outro valor para sandbox).
|
131
|
+
Exemplo de uso:
|
132
|
+
```
|
133
|
+
client_id = '123456789'
|
134
|
+
user_agent = 'MyApp/1.0'
|
135
|
+
private_key = 'my_private_key'
|
136
|
+
ambiente = 'prd'
|
137
|
+
admin = STNEAdmin(client_id, user_agent, private_key, ambiente)
|
138
|
+
```
|
139
|
+
"""
|
124
140
|
|
125
141
|
try:
|
126
142
|
|
@@ -153,6 +169,16 @@ class StoneAdmin:
|
|
153
169
|
}
|
154
170
|
|
155
171
|
def __get_token(self):
|
172
|
+
"""
|
173
|
+
Obtém um token de autenticação para acessar a API do Stone Bank.
|
174
|
+
Returns:
|
175
|
+
str: O token de acesso gerado.
|
176
|
+
Raises:
|
177
|
+
requests.exceptions.RequestException: Se ocorrer um erro durante a solicitação HTTP.
|
178
|
+
KeyError: Se a resposta da solicitação não contiver a chave 'access_token'.
|
179
|
+
Exemplo:
|
180
|
+
>>> token = self.__get_token()
|
181
|
+
"""
|
156
182
|
base_url = f'{self.base_auth_url}/auth/realms/stone_bank'
|
157
183
|
auth_url = f'{base_url}/protocol/openid-connect/token'
|
158
184
|
payload = {
|
@@ -186,6 +212,24 @@ class StoneAdmin:
|
|
186
212
|
return response.json()['access_token']
|
187
213
|
|
188
214
|
def renew_authorization(self):
|
215
|
+
"""
|
216
|
+
Renova a autorização do usuário.
|
217
|
+
|
218
|
+
Esta função renova a autorização do usuário, obtendo um novo token de autenticação
|
219
|
+
e atualizando o cabeçalho de autenticação.
|
220
|
+
|
221
|
+
Parâmetros:
|
222
|
+
- Nenhum
|
223
|
+
|
224
|
+
Retorno:
|
225
|
+
- Nenhum
|
226
|
+
|
227
|
+
Exemplo de uso:
|
228
|
+
```
|
229
|
+
obj = ClassName()
|
230
|
+
obj.renew_authorization()
|
231
|
+
```
|
232
|
+
"""
|
189
233
|
self.token = self.__get_token()
|
190
234
|
self.authenticated_header = {
|
191
235
|
'Authorization' : f"Bearer {self.token}",
|
@@ -194,6 +238,43 @@ class StoneAdmin:
|
|
194
238
|
}
|
195
239
|
|
196
240
|
def verificar_cliente(self,documento:str)->dict:
|
241
|
+
"""
|
242
|
+
Verifica se um cliente com o documento fornecido existe e se a conta associada está ativa.
|
243
|
+
Args:
|
244
|
+
documento (str): O número do documento do cliente.
|
245
|
+
Returns:
|
246
|
+
dict: Um dicionário contendo as informações do cliente e da conta, se encontrado.
|
247
|
+
- success (bool): Indica se a operação foi bem-sucedida.
|
248
|
+
- status_code (int): O código de status da resposta da API.
|
249
|
+
- error (Exception): O erro ocorrido, se houver.
|
250
|
+
- encontrado (bool): Indica se o cliente foi encontrado.
|
251
|
+
- detalhes (list): Uma lista de dicionários contendo os detalhes das contas encontradas.
|
252
|
+
- account_code (str): O código da conta.
|
253
|
+
- account_id (str): O ID da conta.
|
254
|
+
- owner_id (str): O ID do proprietário da conta.
|
255
|
+
- closed_at (str): A data de encerramento da conta, se estiver fechada.
|
256
|
+
- created_at (str): A data de criação da conta.
|
257
|
+
- conta_ativa (bool): Indica se a conta está ativa.
|
258
|
+
Raises:
|
259
|
+
ValueError: Se ocorrer um erro na validação dos dados de entrada.
|
260
|
+
ValueError: Se ocorrer um erro na requisição à API Stone Admin.
|
261
|
+
Example:
|
262
|
+
# Instanciar o objeto da classe
|
263
|
+
stne_admin = StneAdmin()
|
264
|
+
# Chamar a função verificar_cliente
|
265
|
+
resultado = stne_admin.verificar_cliente("123456789")
|
266
|
+
# Verificar se a operação foi bem-sucedida
|
267
|
+
if resultado["success"]:
|
268
|
+
# Verificar se o cliente foi encontrado
|
269
|
+
if resultado["encontrado"]:
|
270
|
+
# Acessar os detalhes das contas encontradas
|
271
|
+
detalhes = resultado["detalhes"]
|
272
|
+
for conta in detalhes:
|
273
|
+
print(f"Conta: {conta['account_code']}")
|
274
|
+
print(f"Status: {'Ativa' if conta['conta_ativa'] else 'Inativa'}")
|
275
|
+
print("Cliente não encontrado.")
|
276
|
+
print(f"Erro: {resultado['error']}")
|
277
|
+
"""
|
197
278
|
|
198
279
|
try:
|
199
280
|
|
@@ -295,6 +376,19 @@ class StoneAdmin:
|
|
295
376
|
return retorno_json
|
296
377
|
|
297
378
|
def balance_da_conta(self,account_id:str):
|
379
|
+
"""
|
380
|
+
Retorna o saldo da conta especificada.
|
381
|
+
Parâmetros:
|
382
|
+
- account_id (str): O ID da conta.
|
383
|
+
Retorna:
|
384
|
+
- response (objeto): A resposta da requisição GET contendo o saldo da conta.
|
385
|
+
Exemplo de uso:
|
386
|
+
```
|
387
|
+
account_id = "123456789"
|
388
|
+
response = balance_da_conta(account_id)
|
389
|
+
print(response)
|
390
|
+
```
|
391
|
+
"""
|
298
392
|
try:
|
299
393
|
|
300
394
|
AccountIDValidator(account_id=account_id)
|
@@ -308,6 +402,18 @@ class StoneAdmin:
|
|
308
402
|
return response
|
309
403
|
|
310
404
|
def detalhar_titular_cpf(self,documento:str):
|
405
|
+
"""
|
406
|
+
Detalha o titular do CPF fornecido.
|
407
|
+
Args:
|
408
|
+
documento (str): O número do CPF do titular.
|
409
|
+
Returns:
|
410
|
+
requests.Response: A resposta da requisição HTTP.
|
411
|
+
Raises:
|
412
|
+
ValueError: Se houver um erro na validação dos dados de input.
|
413
|
+
Example:
|
414
|
+
>>> admin = StneAdmin()
|
415
|
+
>>> response = admin.detalhar_titular_cpf('12345678900')
|
416
|
+
"""
|
311
417
|
|
312
418
|
try:
|
313
419
|
|
@@ -328,6 +434,18 @@ class StoneAdmin:
|
|
328
434
|
return response
|
329
435
|
|
330
436
|
def detalhar_titular_cnpj(self,documento:str):
|
437
|
+
"""
|
438
|
+
Detalha o titular de um CNPJ.
|
439
|
+
Args:
|
440
|
+
documento (str): O número do CNPJ a ser consultado.
|
441
|
+
Returns:
|
442
|
+
requests.Response: A resposta da requisição HTTP.
|
443
|
+
Raises:
|
444
|
+
ValueError: Se houver um erro na validação dos dados de input.
|
445
|
+
Example:
|
446
|
+
>>> admin = StneAdmin()
|
447
|
+
>>> response = admin.detalhar_titular_cnpj('12345678901234')
|
448
|
+
"""
|
331
449
|
|
332
450
|
try:
|
333
451
|
|
@@ -346,6 +464,44 @@ class StoneAdmin:
|
|
346
464
|
return response
|
347
465
|
|
348
466
|
def extrair_extrato(self,account_id:str,data_inicio:datetime,data_fim:datetime,async_mode:bool=False):
|
467
|
+
"""
|
468
|
+
Extrai o extrato de uma conta.
|
469
|
+
Args:
|
470
|
+
account_id (str): O ID da conta.
|
471
|
+
data_inicio (datetime): A data de início do extrato.
|
472
|
+
data_fim (datetime): A data de fim do extrato.
|
473
|
+
async_mode (bool, optional): Modo assíncrono. Defaults to False.
|
474
|
+
Returns:
|
475
|
+
dict: Um dicionário contendo informações sobre o resultado da operação.
|
476
|
+
- Se async_mode for False e a resposta for bem-sucedida, retorna:
|
477
|
+
{
|
478
|
+
"success": True,
|
479
|
+
"status_code": int,
|
480
|
+
"error": None,
|
481
|
+
"pdf_content": bytes
|
482
|
+
}
|
483
|
+
- Se async_mode for True e a resposta for bem-sucedida, retorna:
|
484
|
+
{
|
485
|
+
"success": True,
|
486
|
+
"status_code": int,
|
487
|
+
"error": None,
|
488
|
+
"receipt_id": str
|
489
|
+
}
|
490
|
+
- Se a resposta não for bem-sucedida, retorna:
|
491
|
+
{
|
492
|
+
"success": False,
|
493
|
+
"status_code": int,
|
494
|
+
"error": str,
|
495
|
+
"pdf_content": None
|
496
|
+
}
|
497
|
+
- Se ocorrer uma exceção, retorna:
|
498
|
+
{
|
499
|
+
"success": False,
|
500
|
+
"status_code": int,
|
501
|
+
"error": Exception,
|
502
|
+
"pdf_content": None
|
503
|
+
}
|
504
|
+
"""
|
349
505
|
|
350
506
|
try:
|
351
507
|
|
@@ -392,6 +548,24 @@ class StoneAdmin:
|
|
392
548
|
return {"success": False, "status_code": response.status_code, "error": e, "pdf_content": None}
|
393
549
|
|
394
550
|
def download_receipt(self,receipt_id:str):
|
551
|
+
"""
|
552
|
+
Faz o download de um recibo a partir de um ID de recibo.
|
553
|
+
Args:
|
554
|
+
receipt_id (str): O ID do recibo a ser baixado.
|
555
|
+
Returns:
|
556
|
+
dict: Um dicionário contendo os seguintes campos:
|
557
|
+
- 'result' (bool): Indica se o download foi bem-sucedido.
|
558
|
+
- 'status_code' (int): O código de status da resposta HTTP.
|
559
|
+
- 'error' (str ou dict): O erro retornado, se houver.
|
560
|
+
- 'pdf_content' (bytes): O conteúdo do arquivo PDF, se o download for bem-sucedido.
|
561
|
+
Raises:
|
562
|
+
ValueError: Se ocorrer um erro na validação dos dados de entrada.
|
563
|
+
Example:
|
564
|
+
>>> admin = STNEAdmin()
|
565
|
+
>>> result = admin.download_receipt("123456")
|
566
|
+
>>> print(result)
|
567
|
+
{'result': True, 'status_code': 200, 'error': None, 'pdf_content': b'%PDF-1.7\n%����\n1 0 obj\n<<\n/Type /Catalog\n/Pages 2 0 R\n>>\nendobj\n2 0 obj\n<<\n/Type /Pages\n/Kids [3 0 R]\n/Count 1\n>>\nendobj\n3 0 obj\n<<\n/Type /Page\n/Parent 2 0 R\n/Resources <<\n/Font <<\n/F1 4 0 R\n>>\n/ProcSet 5 0 R\n>>\n/MediaBox [0 0 595.276 841.890]\n/Contents 6 0 R\n>>\nendobj\n4 0 obj\n<<\n/Type /Font\n/Subtype /Type1\n/Name /F1\n/BaseFont /Helvetica\n/Encoding /MacRomanEncoding\n>>\nendobj\n5 0 obj\n[/PDF /Text]\nendobj\n6 0 obj\n<<\n/Length 44\n>>\nstream\nBT\n/F1 24 Tf\n100 100 Td\n(Hello, World!) Tj\nET\nendstream\nendobj\nxref\n0 7\n0000000000 65535 f \n0000000010 00000 n \n0000000077 00000 n \n0000000178 00000 n \n0000000302 00000 n \n0000000406 00000 n \n0000000519 00000 n \ntrailer\n<<\n/Size 7\n/Root 1 0 R\n>>\nstartxref\n614\n%%EOF\n'}
|
568
|
+
"""
|
395
569
|
|
396
570
|
try:
|
397
571
|
|
@@ -1 +1 @@
|
|
1
|
-
from .functions import titulo, recriar_pasta, b64encode, b64decode, convert_bquery_result_to_json
|
1
|
+
from .functions import titulo, recriar_pasta, b64encode, b64decode, convert_bquery_result_to_json,get_config
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from .func_titulo import titulo
|
2
2
|
from .func_recriar_pastas import recriar_pasta
|
3
3
|
from .func_b64 import b64decode, b64encode
|
4
|
-
from .func_converters import convert_bquery_result_to_json
|
4
|
+
from .func_converters import convert_bquery_result_to_json
|
5
|
+
from .func_settings import get_config
|
@@ -2,6 +2,16 @@ import os
|
|
2
2
|
import shutil
|
3
3
|
|
4
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
|
+
"""
|
5
15
|
|
6
16
|
try:
|
7
17
|
|
@@ -0,0 +1,62 @@
|
|
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
|
+
try:
|
25
|
+
|
26
|
+
base_path = sys._MEIPASS
|
27
|
+
|
28
|
+
except:
|
29
|
+
|
30
|
+
base_path = os.path.abspath(".")
|
31
|
+
|
32
|
+
if not os.path.exists(file_path):
|
33
|
+
|
34
|
+
file_place = os.path.join(base_path, file_path)
|
35
|
+
|
36
|
+
elif file_path_local is not None:
|
37
|
+
|
38
|
+
file_place = os.path.join(base_path, file_path_local)
|
39
|
+
|
40
|
+
else:
|
41
|
+
|
42
|
+
raise FileNotFoundError(f"Arquivo '{file_path}' não encontrado.")
|
43
|
+
|
44
|
+
try:
|
45
|
+
|
46
|
+
with open(file_place, 'r', encoding='utf-8') as f:
|
47
|
+
|
48
|
+
config = yaml.safe_load(f)
|
49
|
+
|
50
|
+
if prod:
|
51
|
+
|
52
|
+
config['env'] = config['prod']
|
53
|
+
|
54
|
+
else:
|
55
|
+
|
56
|
+
config['env'] = config['prod']
|
57
|
+
|
58
|
+
return config
|
59
|
+
|
60
|
+
except Exception as e:
|
61
|
+
|
62
|
+
raise(e)
|
@@ -9,6 +9,16 @@ from pydantic import ValidationError, field_validator
|
|
9
9
|
|
10
10
|
# Classe para validar - titulo
|
11
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
|
+
"""
|
12
22
|
|
13
23
|
# Titulo
|
14
24
|
project_name: str
|
@@ -16,7 +26,21 @@ class TituloSettings(BaseModel):
|
|
16
26
|
project_dev_name: str
|
17
27
|
project_dev_mail: str
|
18
28
|
# Validador para garantir que nenhum campo seja uma string vazia
|
19
|
-
|
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
|
+
"""
|
20
44
|
@field_validator('project_name', 'project_version', 'project_dev_name', 'project_dev_mail')
|
21
45
|
def check_non_empty_string(cls, value, info):
|
22
46
|
if not isinstance(value, str) or not value.strip():
|
@@ -56,6 +80,19 @@ def last_modified()->datetime:
|
|
56
80
|
return last_modified_date
|
57
81
|
|
58
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
|
+
"""
|
59
96
|
|
60
97
|
try:
|
61
98
|
settings = TituloSettings(project_name=project_name,project_version=project_version,project_dev_name=project_dev_name,project_dev_mail=project_dev_mail)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from pydantic import BaseModel, field_validator, model_validator
|
2
|
+
|
2
3
|
class InitParamsValidator(BaseModel):
|
3
4
|
limit:int
|
4
5
|
id_project:str
|
@@ -64,11 +65,32 @@ class tryQueryValidator(BaseModel):
|
|
64
65
|
|
65
66
|
|
66
67
|
class tryInsertListValidator(BaseModel):
|
67
|
-
|
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
|
+
|
68
80
|
insert_limit:int
|
69
81
|
list_to_insert:list
|
70
82
|
table:str
|
71
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
|
+
"""
|
72
94
|
@field_validator('list_to_insert')
|
73
95
|
def check_list_input(cls, value, info):
|
74
96
|
if not isinstance(value, list) and len(value) > 0:
|
@@ -76,6 +98,16 @@ class tryInsertListValidator(BaseModel):
|
|
76
98
|
|
77
99
|
return value
|
78
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
|
+
"""
|
79
111
|
@field_validator('table')
|
80
112
|
def check_str_input(cls, value, info):
|
81
113
|
if not isinstance(value, str) or not value.strip():
|
@@ -83,6 +115,16 @@ class tryInsertListValidator(BaseModel):
|
|
83
115
|
|
84
116
|
return value
|
85
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
|
+
"""
|
86
128
|
@field_validator('insert_limit')
|
87
129
|
def check_int_input(cls, value, info):
|
88
130
|
if not isinstance(value, int) or value > 10000:
|
@@ -1,16 +1,50 @@
|
|
1
1
|
|
2
2
|
from pydantic import BaseModel, field_validator
|
3
|
+
|
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
|
+
|
4
17
|
key: str
|
5
18
|
with_subject: str
|
6
19
|
scopes : list
|
7
20
|
version : str
|
8
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
|
+
"""
|
9
32
|
@field_validator('key','with_subject', "version")
|
10
33
|
def check_str_input(cls, value, info):
|
11
34
|
if not isinstance(value, str) or not value.strip():
|
12
35
|
raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
|
13
36
|
return value
|
37
|
+
|
38
|
+
"""
|
39
|
+
Valida se o valor é uma lista.
|
40
|
+
Parâmetros:
|
41
|
+
- value (Any): O valor a ser validado.
|
42
|
+
- info (FieldInfo): Informações sobre o campo.
|
43
|
+
Retorna:
|
44
|
+
- value (Any): O valor validado.
|
45
|
+
Lança:
|
46
|
+
- ValueError: Se o valor não for uma lista.
|
47
|
+
"""
|
14
48
|
@field_validator('scopes')
|
15
49
|
def check_list_input(cls, value, info):
|
16
50
|
if not isinstance(value, list):
|
@@ -19,9 +53,27 @@ class InitParamsValidator(BaseModel):
|
|
19
53
|
return value
|
20
54
|
|
21
55
|
class CreateFolderValidator(BaseModel):
|
56
|
+
"""
|
57
|
+
Validação para a criação de uma pasta no Google Drive.
|
58
|
+
Atributos:
|
59
|
+
- name (str): O nome da pasta a ser criada.
|
60
|
+
- parent_folder_id (str): O ID da pasta pai onde a nova pasta será criada.
|
61
|
+
Métodos:
|
62
|
+
- check_str_input(value, info): Valida se o valor fornecido é uma string não vazia.
|
63
|
+
"""
|
22
64
|
name: str
|
23
65
|
parent_folder_id: str
|
24
66
|
|
67
|
+
"""
|
68
|
+
Valida se o valor fornecido é uma string não vazia.
|
69
|
+
Parâmetros:
|
70
|
+
- value: O valor a ser validado.
|
71
|
+
- info: Informações sobre o campo sendo validado.
|
72
|
+
Retorna:
|
73
|
+
- O valor fornecido, se for uma string não vazia.
|
74
|
+
Lança:
|
75
|
+
- ValueError: Se o valor não for uma string ou for uma string vazia.
|
76
|
+
"""
|
25
77
|
@field_validator('name','parent_folder_id')
|
26
78
|
def check_str_input(cls, value, info):
|
27
79
|
if not isinstance(value, str) or not value.strip():
|
@@ -29,9 +81,36 @@ class CreateFolderValidator(BaseModel):
|
|
29
81
|
return value
|
30
82
|
|
31
83
|
class ListFolderValidator(BaseModel):
|
32
|
-
|
33
|
-
|
34
|
-
|
84
|
+
"""
|
85
|
+
Validação para a classe ListFolderValidator.
|
86
|
+
|
87
|
+
Atributos:
|
88
|
+
- query (str): A consulta a ser realizada.
|
89
|
+
- spaces (str): Os espaços a serem considerados.
|
90
|
+
- fields (str): Os campos a serem retornados.
|
91
|
+
|
92
|
+
Métodos:
|
93
|
+
- check_str_input(cls, value, info): Valida se o valor fornecido é uma string não vazia.
|
94
|
+
|
95
|
+
"""
|
96
|
+
|
97
|
+
query: str
|
98
|
+
fields: str
|
99
|
+
|
100
|
+
"""
|
101
|
+
Valida se o valor fornecido é uma string não vazia.
|
102
|
+
|
103
|
+
Parâmetros:
|
104
|
+
- value (Any): O valor a ser validado.
|
105
|
+
- info (FieldInfo): Informações sobre o campo.
|
106
|
+
|
107
|
+
Retorna:
|
108
|
+
- value (Any): O valor validado.
|
109
|
+
|
110
|
+
Lança:
|
111
|
+
- ValueError: Se o valor não for uma string ou for uma string vazia.
|
112
|
+
|
113
|
+
"""
|
35
114
|
@field_validator('query','spaces','fields')
|
36
115
|
def check_str_input(cls, value, info):
|
37
116
|
if not isinstance(value, str) or not value.strip():
|