csc-cia-stne 0.1.20__tar.gz → 0.1.21__tar.gz
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-0.1.20 → csc_cia_stne-0.1.21}/PKG-INFO +1 -1
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/pyproject.toml +1 -1
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/bc_sta.py +75 -71
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne.egg-info/PKG-INFO +1 -1
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/LICENCE +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/README.md +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/README_PYPI.md +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/setup.cfg +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/__init__.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/bc_correios.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/email.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/ftp.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/gcp_bigquery.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/gcp_bucket.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/google_drive.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/karavela.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/logger_json.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/logger_rich.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/provio.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/servicenow.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/slack.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/stne_admin.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/__init__.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/__init__.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_b64.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_converters.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_datetime.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_delete.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_get_secret.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_recriar_pastas.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_settings.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_titulo.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_validate_json.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/GcpBigQueryValidator.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/GoogleDriveValidator.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/ServiceNowValidator.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/__init__.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/ftp.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/gcp_bucket.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/waccess.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/web_validator.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/web_screen/__init__.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/web_screen/web_screen_abstract.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/web_screen/web_screen_botcity.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/web_screen/web_screen_selenium.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/wacess.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/web.py +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne.egg-info/SOURCES.txt +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne.egg-info/dependency_links.txt +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne.egg-info/requires.txt +0 -0
- {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne.egg-info/top_level.txt +0 -0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "csc_cia_stne"
|
7
|
-
version = "0.1.
|
7
|
+
version = "0.1.21"
|
8
8
|
license = { text = "MIT" }
|
9
9
|
description = "Biblioteca do time CSC-CIA utilizada no desenvolvimento de RPAs"
|
10
10
|
keywords = ["karavela", "csc", "cia", "stone", "rpa", "botcity", "stne"]
|
@@ -509,84 +509,88 @@ class BC_STA:
|
|
509
509
|
tipo_arquivo: list = None):
|
510
510
|
resultados = []
|
511
511
|
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
# Monta a URL usando a data atual do cursor
|
523
|
-
_inicio_str = ultima_dt.strftime("%Y-%m-%dT%H:%M:%S")
|
524
|
-
url = f"{self.base_url}/arquivos?tipoConsulta=AVANC&nivelDetalhe={nivel}"
|
525
|
-
url += f"&dataHoraInicio={_inicio_str}"
|
526
|
-
if situacao:
|
527
|
-
url += f"&situacaoTransmissao={situacao}"
|
528
|
-
if identificadorDocumento:
|
529
|
-
url += f"&identificadorDocumento={identificadorDocumento}"
|
530
|
-
if dt_fim:
|
531
|
-
_fim_str = dt_fim.strftime("%Y-%m-%dT%H:%M:%S")
|
532
|
-
url += f"&dataHoraFim={_fim_str}"
|
533
|
-
url += f"&qtdMaxResultados={qtd}"
|
534
|
-
|
535
|
-
response = requests.get(
|
536
|
-
url, headers=self.headers, auth=self.auth, timeout=60,
|
537
|
-
)
|
538
|
-
|
539
|
-
if response.status_code != 200:
|
540
|
-
log.error(f"Erro ao listar arquivos: response code {response.status_code}\n{response.text}")
|
541
|
-
return False
|
542
|
-
|
543
|
-
try:
|
544
|
-
dados = xml_response_to_json(response.text)
|
545
|
-
if not dados:
|
546
|
-
break # sem mais resultados
|
547
|
-
|
548
|
-
# Normaliza dados para lista
|
549
|
-
itens = dados if isinstance(dados, list) else [dados]
|
550
|
-
|
551
|
-
# (opcional) filtra por tipo_arquivo
|
552
|
-
if tipo_arquivo is not None:
|
553
|
-
itens = [a for a in itens if a.get("TipoArquivo") in tipo_arquivo]
|
512
|
+
try:
|
513
|
+
# Parse seguro para datetime (assume formato ISO 'AAAA-MM-DDTHH:MM:SS')
|
514
|
+
dt_inicio = datetime.fromisoformat(inicio)
|
515
|
+
dt_fim = datetime.fromisoformat(fim) if fim else None
|
516
|
+
ultima_dt = dt_inicio
|
517
|
+
|
518
|
+
while True:
|
519
|
+
# Se já passamos do fim, encerra antes de chamar a API
|
520
|
+
if dt_fim and ultima_dt >= dt_fim:
|
521
|
+
break
|
554
522
|
|
555
|
-
|
523
|
+
# Monta a URL usando a data atual do cursor
|
524
|
+
_inicio_str = ultima_dt.strftime("%Y-%m-%dT%H:%M:%S")
|
525
|
+
url = f"{self.base_url}/arquivos?tipoConsulta=AVANC&nivelDetalhe={nivel}"
|
526
|
+
url += f"&dataHoraInicio={_inicio_str}"
|
527
|
+
if situacao:
|
528
|
+
url += f"&situacaoTransmissao={situacao}"
|
529
|
+
if identificadorDocumento:
|
530
|
+
url += f"&identificadorDocumento={identificadorDocumento}"
|
531
|
+
if dt_fim:
|
532
|
+
_fim_str = dt_fim.strftime("%Y-%m-%dT%H:%M:%S")
|
533
|
+
url += f"&dataHoraFim={_fim_str}"
|
534
|
+
url += f"&qtdMaxResultados={qtd}"
|
535
|
+
|
536
|
+
response = requests.get(
|
537
|
+
url, headers=self.headers, auth=self.auth, timeout=60,
|
538
|
+
)
|
539
|
+
|
540
|
+
if response.status_code != 200:
|
541
|
+
log.error(f"Erro ao listar arquivos: response code {response.status_code}\n{response.text}")
|
542
|
+
return False
|
556
543
|
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
544
|
+
try:
|
545
|
+
dados = xml_response_to_json(response.text)
|
546
|
+
if not dados:
|
547
|
+
break # sem mais resultados
|
548
|
+
|
549
|
+
# Normaliza dados para lista
|
550
|
+
itens = dados if isinstance(dados, list) else [dados]
|
551
|
+
|
552
|
+
# (opcional) filtra por tipo_arquivo
|
553
|
+
if tipo_arquivo is not None:
|
554
|
+
itens = [a for a in itens if a.get("TipoArquivo") in tipo_arquivo]
|
555
|
+
|
556
|
+
resultados.extend(itens)
|
557
|
+
|
558
|
+
# Atualiza o cursor a partir do último item retornado
|
559
|
+
# Busca o último com DataHoraDisponibilizacao
|
560
|
+
ultimo = None
|
561
|
+
for cand in reversed(itens):
|
562
|
+
if "DataHoraDisponibilizacao" in cand and cand["DataHoraDisponibilizacao"]:
|
563
|
+
ultimo = cand["DataHoraDisponibilizacao"]
|
564
|
+
break
|
565
|
+
|
566
|
+
if not ultimo:
|
567
|
+
# fallback: se o JSON bruto vier como dict/list diferente, tente no original
|
568
|
+
if isinstance(dados, list) and dados and "DataHoraDisponibilizacao" in dados[-1]:
|
569
|
+
ultimo = dados[-1]["DataHoraDisponibilizacao"]
|
570
|
+
elif isinstance(dados, dict) and "DataHoraDisponibilizacao" in dados:
|
571
|
+
ultimo = dados["DataHoraDisponibilizacao"]
|
572
|
+
|
573
|
+
if not ultimo:
|
574
|
+
log.error("Campo 'DataHoraDisponibilizacao' não encontrado ou estrutura inesperada.")
|
575
|
+
return False
|
576
|
+
|
577
|
+
# Cursor: último + 1s para evitar repetir o mesmo registro
|
578
|
+
proxima_dt = datetime.fromisoformat(ultimo) + timedelta(seconds=1)
|
579
|
+
|
580
|
+
# Se a próxima dt já ultrapassa o fim, encerramos sem nova chamada
|
581
|
+
if dt_fim and proxima_dt > dt_fim:
|
563
582
|
break
|
564
583
|
|
565
|
-
|
566
|
-
# fallback: se o JSON bruto vier como dict/list diferente, tente no original
|
567
|
-
if isinstance(dados, list) and dados and "DataHoraDisponibilizacao" in dados[-1]:
|
568
|
-
ultimo = dados[-1]["DataHoraDisponibilizacao"]
|
569
|
-
elif isinstance(dados, dict) and "DataHoraDisponibilizacao" in dados:
|
570
|
-
ultimo = dados["DataHoraDisponibilizacao"]
|
584
|
+
ultima_dt = proxima_dt
|
571
585
|
|
572
|
-
|
573
|
-
log.error("
|
586
|
+
except ET.ParseError as e:
|
587
|
+
log.error(f"Erro ao processar XML: {e}")
|
574
588
|
return False
|
575
589
|
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
if dt_fim and proxima_dt > dt_fim:
|
581
|
-
break
|
582
|
-
|
583
|
-
ultima_dt = proxima_dt
|
584
|
-
|
585
|
-
except ET.ParseError as e:
|
586
|
-
log.error(f"Erro ao processar XML: {e}")
|
587
|
-
return False
|
588
|
-
|
589
|
-
return resultados
|
590
|
+
return resultados
|
591
|
+
except Exception as e:
|
592
|
+
log.error(f"Erro em BC_STA:listar_arquivos: {e}")
|
593
|
+
return False
|
590
594
|
|
591
595
|
def download_arquivo(self,protocolo:str,filename:str=None):
|
592
596
|
"""Faz o download de um arquivo de um protocolo especifico
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/__init__.py
RENAMED
File without changes
|
{csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_b64.py
RENAMED
File without changes
|
File without changes
|
{csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_datetime.py
RENAMED
File without changes
|
{csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_delete.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_settings.py
RENAMED
File without changes
|
{csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_titulo.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/__init__.py
RENAMED
File without changes
|
File without changes
|
{csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/gcp_bucket.py
RENAMED
File without changes
|
{csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/waccess.py
RENAMED
File without changes
|
File without changes
|
{csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/web_screen/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|