Skip to content

Refatorar extração de itens XML/ZIP para criar XMLWithPre #1265

Description

@robertatakenaka

Descrição

Atualmente, get_xml_items, get_xml_with_pre_from_zip_file e get_xml_with_pre_from_xml_file (em packtools/sps/pid_provider/xml_sps_lib.py) recebem os parâmetros filenames e capture_errors, que tornam o fluxo de erro inconsistente: em alguns casos a função levanta exceção, em outros retorna/yield um dict com chave error, dependendo da flag passada pelo chamador. Isso dificulta o tratamento de erro por item (especialmente em ZIPs com múltiplos XMLs, onde um arquivo corrompido não deveria interromper o processamento dos demais) e espalha lógica de decisão de erro pelas camadas superiores.

Além disso, XMLWithPre armazenava filename, files e filenames como atributos simples atribuídos externamente (xml_with_pre.filename = ...), sem padronização de onde essa informação era originada (arquivo local vs. componente de ZIP).

Objetivo

  • Simplificar as assinaturas removendo filenames/capture_errors.
  • Centralizar a captura de erro por item (mensagem, tipo, traceback), sem interromper o processamento dos demais itens de um ZIP.
  • Padronizar a atribuição de metadados de origem em XMLWithPre através dos métodos add_xml_info (nome do XML e path de origem) e add_zip_info (path do ZIP, lista de arquivos e basenames).
  • Manter compatibilidade de nomes usados externamente (filename, files, filenames) como aliases (property) de xml_name, zip_namelist e zip_basenames.
  • Ajustar string_to_5_digits para retornar str (padronizando o tipo usado na composição de PIDs).

Escopo

  • packtools/sps/pid_provider/xml_sps_lib.py
  • tests/sps/pid_provider/test_models_dates.py
  • tests/sps/pid_provider/test_xml_sps_lib.py
  • tests/sps/pid_provider/test_xmlsps.py
  • tests/sps/pid_provider/test_xml_sps_lib_functions.py (novo)
  • packtools/version.py (bump para 4.16.9)

Critérios de aceite

  • get_xml_items, get_xml_with_pre_from_zip_file e get_xml_with_pre_from_xml_file não recebem mais filenames/capture_errors.
  • Erro em um item de ZIP não interrompe o processamento dos demais itens válidos.
  • XMLWithPre.filename/files/filenames continuam funcionando como antes (compatibilidade), agora via alias de xml_name/zip_namelist/zip_basenames.
  • Cobertura de teste para os cenários de sucesso, fallback de encoding (utf-8 → iso-8859-1) e erro por item, tanto para arquivo .xml quanto para .zip.
  • Suíte de testes passando integralmente (pytest tests/sps/pid_provider/).

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions