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 +55 -45
- {csc_cia_stne-0.0.65.dist-info → csc_cia_stne-0.0.67.dist-info}/METADATA +2 -1
- {csc_cia_stne-0.0.65.dist-info → csc_cia_stne-0.0.67.dist-info}/RECORD +6 -6
- {csc_cia_stne-0.0.65.dist-info → csc_cia_stne-0.0.67.dist-info}/LICENCE +0 -0
- {csc_cia_stne-0.0.65.dist-info → csc_cia_stne-0.0.67.dist-info}/WHEEL +0 -0
- {csc_cia_stne-0.0.65.dist-info → csc_cia_stne-0.0.67.dist-info}/top_level.txt +0 -0
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
|
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 (
|
494
|
-
inicio (str):
|
495
|
-
|
496
|
-
|
497
|
-
|
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 já 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
|
-
|
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
|
-
|
542
|
+
|
551
543
|
break # Sai do loop se não houver mais dados
|
552
|
-
|
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
|
-
|
558
|
-
|
561
|
+
|
562
|
+
log.error("Campo 'DataHoraDisponibilizacao' não encontrado ou estrutura inesperada.")
|
563
|
+
return False
|
564
|
+
|
559
565
|
except ET.ParseError as e:
|
560
|
-
|
561
|
-
|
566
|
+
|
567
|
+
log.error(f"Erro ao processar XML: {e}")
|
568
|
+
return False
|
569
|
+
|
562
570
|
else:
|
563
|
-
|
564
|
-
|
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.
|
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=
|
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.
|
30
|
-
csc_cia_stne-0.0.
|
31
|
-
csc_cia_stne-0.0.
|
32
|
-
csc_cia_stne-0.0.
|
33
|
-
csc_cia_stne-0.0.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|