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.
@@ -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
- query : str
33
- spaces: str
34
- fields : str
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():