csc-cia-stne 0.0.65__py3-none-any.whl → 0.0.67__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/bc_sta.py CHANGED
@@ -3,8 +3,11 @@ import requests
3
3
  import xml.etree.ElementTree as ET
4
4
  import hashlib
5
5
  from pydantic import BaseModel, ValidationError, field_validator, Field, HttpUrl
6
- from typing import Literal, Dict, Union, Optional
6
+ from typing import Literal, Dict, Union, Optional, List
7
7
  import json
8
+ import logging
9
+
10
+ log = logging.getLogger('__main__')
8
11
 
9
12
  def xml_to_dict(element):
10
13
  """Converte um elemento XML recursivamente para um dicionário."""
@@ -170,16 +173,26 @@ class ListarArquivosParams(BaseModel):
170
173
  Atributos:
171
174
  nivel (str): Nível de detalhe da consulta. Aceita apenas 'RES', 'BAS' ou 'COMPL'.
172
175
  inicio (str): Data e hora de início no formato ISO 8601 (yyyy-MM-ddTHH:mm:ss).
176
+ fim (str): Data e hora de fim no formato ISO 8601 (yyyy-MM-ddTHH:mm:ss).
173
177
  situacao (Optional[str]): Situação da transmissão, podendo ser 'REC' ou 'A_REC'.
174
178
  identificadorDocumento (Optional[str]): Identificador do documento, se aplicável.
175
179
  qtd (int): Quantidade máxima de resultados (valor padrão: 100, máximo permitido: 100).
180
+ tipo_arquivo (list): lista de tipos de arquivo para filtrar ['ACCS002','ACCS003','AJUD301','AJUD302','AJUD303','AJUD304','AJUD305','AJUD308','AJUD309','AJUD310','AJUD331','AMES102','AMTF102','ASVR9810','ATXB001']
176
181
  """
177
182
  nivel: Literal['RES', 'BAS', 'COMPL']
178
183
  #inicio: str = Field(..., regex=r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$")
179
184
  inicio: str = Field(..., pattern=r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$")
185
+ fim: Optional[str] = Field(None, pattern=r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$")
180
186
  situacao: Optional[Literal['REC', 'A_REC']] = None
181
187
  identificadorDocumento: Optional[str] = None
182
188
  qtd: int = Field(default=100, le=100)
189
+ #tipo_arquivo: Optional[str] = None
190
+ tipo_arquivo: Optional[List[
191
+ Literal[
192
+ 'ACCS002', 'ACCS003', 'AJUD301', 'AJUD302', 'AJUD303', 'AJUD304', 'AJUD305', 'AJUD308',
193
+ 'AJUD309', 'AJUD310', 'AJUD331', 'AMES102', 'AMTF102', 'ASVR9810', 'ATXB001'
194
+ ]
195
+ ]] = None
183
196
 
184
197
  class DownloadArquivoParams(BaseModel):
185
198
  protocolo: str = Field(..., min_length=1, description="Código do protocolo")
@@ -485,52 +498,31 @@ class BC_STA:
485
498
  #return f"Failed to create protocol. Status code: {response.status_code}, Reason: {response.reason}"
486
499
  return resposta
487
500
 
488
- def listar_arquivos_old(self, nivel: Literal['RES', 'BAS', 'COMPL'], inicio: str, situacao: Optional[Literal['REC', 'A_REC']] = None, identificadorDocumento: Optional[str] = None, qtd: int = 100):
489
- """
490
- Lista os arquivos disponíveis na API STA.
501
+ def listar_arquivos(self, nivel: Literal['RES', 'BAS', 'COMPL'], inicio: str, fim: str = None,situacao: Optional[Literal['REC', 'A_REC']] = None, identificadorDocumento: Optional[str] = None, qtd: int = 100, tipo_arquivo:list=None):
502
+ """Lista os arquivos do STA com os parâmetros informados.
491
503
 
492
504
  Args:
493
- nivel (str): Nível de detalhe da consulta ('RES', 'BAS' ou 'COMPL').
494
- inicio (str): Data e hora de início no formato ISO 8601 (yyyy-MM-ddTHH:mm:ss).
495
- situacao (Optional[str]): Situação da transmissão ('REC' ou 'A_REC').
496
- identificadorDocumento (Optional[str]): Identificador do documento.
497
- qtd (int): Quantidade máxima de resultados (padrão: 100, máximo: 100).
498
-
505
+ nivel (Literal['RES', 'BAS', 'COMPL']): nivel de detalhamento da consulta
506
+ inicio (str): data de inicio, no padrao 'AAAA-MM-DDTHH:MM:SS'
507
+ fim (str, optional): data de fim da consulta, no padrao 'AAAA-MM-DDTHH:MM:SS'
508
+ situacao (Optional[Literal['REC', 'A_REC']], optional): Arquivos recebidos ou ainda não recebidos. Default=None (Todos).
509
+ identificadorDocumento (Optional[str], optional): Identificador documento. Default=None (Todos).
510
+ qtd (int, optional): Quantidade de arquivos na resposta. Default=100 (máximo=100).
511
+ tipo_arquivo (list, optional): Tipo de arquivo para fazer download. Default=None (Todos). Opções: ['ACCS002', 'ACCS003', 'AJUD301', 'AJUD302', 'AJUD303', 'AJUD304', 'AJUD305', 'AJUD308', 'AJUD309', 'AJUD310', 'AJUD331', 'AMES102', 'AMTF102', 'ASVR9810', 'ATXB001'].
512
+
499
513
  Returns:
500
- dict: Resposta da API em formato JSON.
514
+ list: Lista de arquivos do STA
501
515
  """
502
- params = ListarArquivosParams(nivel=nivel, inicio=inicio, situacao=situacao, identificadorDocumento=identificadorDocumento, qtd=qtd)
503
-
504
- url = f"{self.base_url}/arquivos?tipoConsulta=AVANC&nivelDetalhe={params.nivel}"
505
- url += f"&dataHoraInicio={params.inicio}&situacaoTransmissao={params.situacao}" if params.situacao else ""
506
- url += f"&identificadorDocumento={params.identificadorDocumento}" if params.identificadorDocumento else ""
507
- url += f"&qtdMaxResultados={params.qtd}"
508
-
509
- response = requests.get(
510
- url,
511
- headers=self.headers,
512
- auth=self.auth,
513
- timeout=60,
514
- )
515
-
516
- if response.status_code == 200:
517
- return xml_response_to_json(response.text) # Retorna um dicionário
518
-
519
-
520
- else:
521
- print(f"Erro ao listar arquivos: {response.status_code}")
522
- return None
523
-
524
- def listar_arquivos(self, nivel: Literal['RES', 'BAS', 'COMPL'], inicio: str, situacao: Optional[Literal['REC', 'A_REC']] = None, identificadorDocumento: Optional[str] = None, qtd: int = 100):
525
516
  resultados = []
526
517
  ultima_data = inicio
527
518
 
528
519
  while True:
529
- params = ListarArquivosParams(nivel=nivel, inicio=ultima_data, situacao=situacao, identificadorDocumento=identificadorDocumento, qtd=qtd)
520
+ params = ListarArquivosParams(nivel=nivel, inicio=ultima_data, fim=fim, situacao=situacao, identificadorDocumento=identificadorDocumento, qtd=qtd, tipo_arquivo=tipo_arquivo)
530
521
 
531
522
  url = f"{self.base_url}/arquivos?tipoConsulta=AVANC&nivelDetalhe={params.nivel}"
532
523
  url += f"&dataHoraInicio={params.inicio}&situacaoTransmissao={params.situacao}" if params.situacao else ""
533
524
  url += f"&identificadorDocumento={params.identificadorDocumento}" if params.identificadorDocumento else ""
525
+ url += f"&dataHoraFim={params.fim}" if params.fim else ""
534
526
  url += f"&qtdMaxResultados={params.qtd}"
535
527
 
536
528
  response = requests.get(
@@ -541,27 +533,45 @@ class BC_STA:
541
533
  )
542
534
 
543
535
  if response.status_code == 200:
536
+
544
537
  try:
538
+
545
539
  dados = xml_response_to_json(response.text)
546
- #print(dados)
547
- #print(type(dados))
548
540
 
549
541
  if not dados: # Verifica se a lista está vazia
550
- #print("lista ta vaziaaaa")
542
+
551
543
  break # Sai do loop se não houver mais dados
552
- resultados.extend(dados)
544
+
545
+ # Filtra apenas os arquivos do tipo 'AJUD308'
546
+ if tipo_arquivo is not None:
547
+
548
+ dados_filtrados = [arquivo for arquivo in dados if arquivo.get("TipoArquivo") in tipo_arquivo]
549
+ resultados.extend(dados_filtrados)
550
+
551
+ else:
552
+
553
+ resultados.extend(dados)
554
+
553
555
  # Verifica se o campo 'DataHoraDisponibilizacao' existe no último registro
554
556
  if dados and isinstance(dados, list) and 'DataHoraDisponibilizacao' in dados[-1]:
557
+
555
558
  ultima_data = dados[-1]['DataHoraDisponibilizacao'] # Atualiza a data para a próxima requisição
559
+
556
560
  else:
557
- print("Campo 'DataHoraDisponibilizacao' não encontrado ou estrutura inesperada.")
558
- break
561
+
562
+ log.error("Campo 'DataHoraDisponibilizacao' não encontrado ou estrutura inesperada.")
563
+ return False
564
+
559
565
  except ET.ParseError as e:
560
- print(f"Erro ao processar XML: {e}")
561
- break
566
+
567
+ log.error(f"Erro ao processar XML: {e}")
568
+ return False
569
+
562
570
  else:
563
- print(f"Erro ao listar arquivos: {response.status_code}")
564
- break
571
+
572
+ log.error(f"Erro ao listar arquivos: {response.status_code}")
573
+ return False
574
+
565
575
  return resultados
566
576
 
567
577
  def download_arquivo(self,protocolo:str,filename:str=None):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: csc_cia_stne
3
- Version: 0.0.65
3
+ Version: 0.0.67
4
4
  Summary: Biblioteca do time CSC-CIA utilizada no desenvolvimento de RPAs
5
5
  License: MIT
6
6
  Keywords: karavela,csc,cia,stone,rpa,botcity,stne
@@ -27,6 +27,7 @@ Requires-Dist: botcity-framework-web
27
27
  Requires-Dist: email-validator
28
28
  Requires-Dist: botcity-maestro-sdk
29
29
  Requires-Dist: psutil
30
+ Requires-Dist: cryptography
30
31
  Requires-Dist: pyautogui
31
32
 
32
33
  Essa biblioteca é desenvolvida e atualizada pelo time **CSC-CIA** da **Stone**
@@ -1,6 +1,6 @@
1
1
  csc_cia_stne/__init__.py,sha256=Io-gKis1evws5cHUqyOrcsZKNCQRviYj3zbp__5lgKU,2512
2
2
  csc_cia_stne/bc_correios.py,sha256=pQAnRrcXEMrx3N1MWydZVIhEQLerh3x8-0B045zZIzk,24174
3
- csc_cia_stne/bc_sta.py,sha256=bVj7o2oOrAR3V_fSD9ex0CGahLc1U6EgeYetQGUw1-0,25282
3
+ csc_cia_stne/bc_sta.py,sha256=KWHTytM3msAFayt8y5_97RwWHE8Dv8ssfwyh6zU7xI0,25836
4
4
  csc_cia_stne/email.py,sha256=RK_TzWBVnUfpP-s5NvjTJJjzhICy8e2fME9EuaiySMY,8162
5
5
  csc_cia_stne/gcp_bigquery.py,sha256=jYxvqrWDOPkxc05U4aef7V5lL8ptqsE93lfn0dLFyvc,7385
6
6
  csc_cia_stne/google_drive.py,sha256=lgcOd27vk2Mb_wP_fAWIbec-S3MIBKyh4TpRth6REXc,12788
@@ -26,8 +26,8 @@ csc_cia_stne/utilitarios/validations/GoogleDriveValidator.py,sha256=PBo-AV2bjR__
26
26
  csc_cia_stne/utilitarios/validations/ServiceNowValidator.py,sha256=yleKUIo1ZfyloP9fDPNjv3JJXdLcocT81WIgRSYmqEA,14423
27
27
  csc_cia_stne/utilitarios/validations/__init__.py,sha256=O_qyEU2ji3u6LHUXZCXvUFsMpoMWL625qqHTXyXivTA,106
28
28
  csc_cia_stne/utilitarios/validations/web_validator.py,sha256=HYKYSpDv1RvRjZIuwTPt-AbEz-9392MxM_O329iYuSA,5722
29
- csc_cia_stne-0.0.65.dist-info/LICENCE,sha256=LPGMtgKki2C3KEZP7hDhA1HBrlq5JCHkIeStUCLEMx4,1073
30
- csc_cia_stne-0.0.65.dist-info/METADATA,sha256=hq9XBuN_o_bOOi8jaqlctvRBd6Ej8MZ3sZ3gXOJiELQ,1312
31
- csc_cia_stne-0.0.65.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
32
- csc_cia_stne-0.0.65.dist-info/top_level.txt,sha256=ldo7GVv3tQx5KJvwBzdZzzQmjPys2NDVVn1rv0BOF2Q,13
33
- csc_cia_stne-0.0.65.dist-info/RECORD,,
29
+ csc_cia_stne-0.0.67.dist-info/LICENCE,sha256=LPGMtgKki2C3KEZP7hDhA1HBrlq5JCHkIeStUCLEMx4,1073
30
+ csc_cia_stne-0.0.67.dist-info/METADATA,sha256=5yKmOI6aa-7_32-o8vylgl_9mvx4UttDvEERbSw_v04,1340
31
+ csc_cia_stne-0.0.67.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
32
+ csc_cia_stne-0.0.67.dist-info/top_level.txt,sha256=ldo7GVv3tQx5KJvwBzdZzzQmjPys2NDVVn1rv0BOF2Q,13
33
+ csc_cia_stne-0.0.67.dist-info/RECORD,,