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.
Files changed (51) hide show
  1. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/PKG-INFO +1 -1
  2. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/pyproject.toml +1 -1
  3. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/bc_sta.py +75 -71
  4. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne.egg-info/PKG-INFO +1 -1
  5. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/LICENCE +0 -0
  6. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/README.md +0 -0
  7. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/README_PYPI.md +0 -0
  8. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/setup.cfg +0 -0
  9. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/__init__.py +0 -0
  10. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/bc_correios.py +0 -0
  11. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/email.py +0 -0
  12. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/ftp.py +0 -0
  13. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/gcp_bigquery.py +0 -0
  14. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/gcp_bucket.py +0 -0
  15. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/google_drive.py +0 -0
  16. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/karavela.py +0 -0
  17. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/logger_json.py +0 -0
  18. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/logger_rich.py +0 -0
  19. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/provio.py +0 -0
  20. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/servicenow.py +0 -0
  21. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/slack.py +0 -0
  22. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/stne_admin.py +0 -0
  23. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/__init__.py +0 -0
  24. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/__init__.py +0 -0
  25. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_b64.py +0 -0
  26. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_converters.py +0 -0
  27. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_datetime.py +0 -0
  28. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_delete.py +0 -0
  29. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_get_secret.py +0 -0
  30. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_recriar_pastas.py +0 -0
  31. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_settings.py +0 -0
  32. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_titulo.py +0 -0
  33. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/functions/func_validate_json.py +0 -0
  34. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/GcpBigQueryValidator.py +0 -0
  35. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/GoogleDriveValidator.py +0 -0
  36. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/ServiceNowValidator.py +0 -0
  37. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/__init__.py +0 -0
  38. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/ftp.py +0 -0
  39. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/gcp_bucket.py +0 -0
  40. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/waccess.py +0 -0
  41. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/validations/web_validator.py +0 -0
  42. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/utilitarios/web_screen/__init__.py +0 -0
  43. {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
  44. {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
  45. {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
  46. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/wacess.py +0 -0
  47. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne/web.py +0 -0
  48. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne.egg-info/SOURCES.txt +0 -0
  49. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne.egg-info/dependency_links.txt +0 -0
  50. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne.egg-info/requires.txt +0 -0
  51. {csc_cia_stne-0.1.20 → csc_cia_stne-0.1.21}/src/csc_cia_stne.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: csc_cia_stne
3
- Version: 0.1.20
3
+ Version: 0.1.21
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "csc_cia_stne"
7
- version = "0.1.20"
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
- # Parse seguro para datetime (assume formato ISO 'AAAA-MM-DDTHH:MM:SS')
513
- dt_inicio = datetime.fromisoformat(inicio)
514
- dt_fim = datetime.fromisoformat(fim) if fim else None
515
- ultima_dt = dt_inicio
516
-
517
- while True:
518
- # Se já passamos do fim, encerra antes de chamar a API
519
- if dt_fim and ultima_dt >= dt_fim:
520
- break
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 passamos do fim, encerra antes de chamar a API
520
+ if dt_fim and ultima_dt >= dt_fim:
521
+ break
554
522
 
555
- resultados.extend(itens)
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
- # Atualiza o cursor a partir do último item retornado
558
- # Busca o último com DataHoraDisponibilizacao
559
- ultimo = None
560
- for cand in reversed(itens):
561
- if "DataHoraDisponibilizacao" in cand and cand["DataHoraDisponibilizacao"]:
562
- ultimo = cand["DataHoraDisponibilizacao"]
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
- if not ultimo:
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
- if not ultimo:
573
- log.error("Campo 'DataHoraDisponibilizacao' não encontrado ou estrutura inesperada.")
586
+ except ET.ParseError as e:
587
+ log.error(f"Erro ao processar XML: {e}")
574
588
  return False
575
589
 
576
- # Cursor: último + 1s para evitar repetir o mesmo registro
577
- proxima_dt = datetime.fromisoformat(ultimo) + timedelta(seconds=1)
578
-
579
- # Se a próxima dt já ultrapassa o fim, encerramos sem nova chamada
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: csc_cia_stne
3
- Version: 0.1.20
3
+ Version: 0.1.21
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
File without changes
File without changes
File without changes