Skip to content

Implementa validação de pacote SPS#1

Open
Rossi-Luciano wants to merge 1 commit into
mainfrom
implement_sps_package_validation
Open

Implementa validação de pacote SPS#1
Rossi-Luciano wants to merge 1 commit into
mainfrom
implement_sps_package_validation

Conversation

@Rossi-Luciano
Copy link
Copy Markdown
Owner

O que esse PR faz?

Conecta a infraestrutura criada no PR scieloorg#93 à validação real via packtools, eliminando os três # TODO: here add the code to validate the package.

Funcionalidades entregues

Validação assíncrona (Celery)

  • task_validate_sps_package: executa validate_zip → grava CSV como documento Wagtail → atualiza status pending → running → done/error

Extração automática de metadados do XML (Opção C)

  • _extract_journal_data(xmltree): extrai abbrev_journal_title, publisher_name_list, nlm_journal_title e license_code diretamente do XML SPS, sem input do usuário e sem dependência de banco externo
  • Habilita as validações de journal-meta que antes eram silenciosamente ignoradas (journal_data=None)

Funções standalone

  • validate_zip(zip_path) -> list[dict]: itera o ZIP via XMLWithPre, executa validate_xml_content com journal_data extraído do XML, retorna lista de 13 campos por item
  • write_csv(rows, output_csv) -> str: grava resultado em CSV com FIELDNAMES padronizados

Correções de bugs do PR scieloorg#93

Bug Correção
Aspas tipográficas U+201C/U+201D como delimitadores de string em wagtail_hooks.pySyntaxError Substituídas por ASCII " com conteúdo tipográfico preservado
task_process_xml_document usado mas não importado em views.py Import restaurado
Campo zip_upload não renderizado na interface Wagtail (campo de formulário invisível por ausência de FieldPanel) get_bound_panel sobrescrito para retornar None, ativando fallback do template que exibe todos os campos visíveis do form
Botão Revalidar oculto no menu (Wagtail 7.4 coloca Button com allow_in_dropdown=True no dropdown) btn.allow_in_dropdown = False para exibir diretamente na linha
validate_xml_content() chamado com params={} (kwarg inexistente) → TypeError Corrigido para argumento posicional rules
Exceção interna do packtools em elementos com xlink:href=None propagava e abortava toda a validação list(items) envolvido em try/except por grupo

Testes adicionados (15 novos)

  • ValidateZipTests (6): retorna list[dict], campos esperados, concatenação de attribute, robustez com None
  • WriteCsvTests (3): cria arquivo, cabeçalho correto, retorna caminho
  • TaskValidateSpsPackageTests (6): transições de status, documento criado, validated_at preenchido, erro capturado, documento anterior substituído
  • SPSPackageValidationRevalidateViewTests: test_revalidate_dispatches_task

Infraestrutura de testes

  • setup.cfg: seção [tool:pytest] com DJANGO_SETTINGS_MODULE = config.settings.test
  • conftest.py criado na raiz do projeto

Âmbito de arquivos

Área Arquivos
Validação xml_manager/utils.py
Task Celery xml_manager/tasks.py
Admin Wagtail xml_manager/wagtail_hooks.py, xml_manager/views.py
Exceções xml_manager/exceptions.py
Testes xml_manager/tests/test_sps_package_validation.py
Config pytest setup.cfg, conftest.py

Como testar manualmente

  1. make up && make django_migrate
  2. Confirmar que o worker Celery está ativo: docker compose -f local.yml logs celeryworker --tail=20
  3. Admin Wagtail → Gestão de XMLValidar pacote SPSAdicionar
  4. Fazer upload de um ZIP SPS (ex.: tests/fixtures/xmls_to_test_validations/media.zip do packtools)
  5. Confirmar que o status muda de pending para done e o link Validation file aparece na listagem
  6. Clicar Revalidar na listagem e confirmar nova validação
  7. Testes automatizados: make pytest

Tickets relacionados

scieloorg#93

🤖 Generated with Claude Code

- Adiciona validate_zip e write_csv em xml_manager/utils.py usando
  packtools xml_validator.validate_xml_content com journal_data
  extraído automaticamente do próprio XML (abbrev_journal_title,
  publisher_name_list, nlm_journal_title, license_code)
- Adiciona task_validate_sps_package (Celery) com transições de
  status pending → running → done/error e geração do CSV como
  documento Wagtail
- Substitui os três TODOs em wagtail_hooks.py e views.py pelo
  disparo da task
- Corrige bug do PR scieloorg#93: aspas tipográficas U+201C/U+201D usadas
  como delimitadores de string em wagtail_hooks.py
- Corrige import ausente de task_process_xml_document em views.py
- Corrige renderização do campo zip_upload sobrescrevendo
  get_bound_panel para retornar None, ativando o fallback do
  template Wagtail que exibe todos os campos visíveis do formulário
- Adiciona SPS_Package_Validation_Error em exceptions.py
- Adiciona [tool:pytest] em setup.cfg com DJANGO_SETTINGS_MODULE
- Adiciona 15 testes novos: ValidateZipTests, WriteCsvTests,
  TaskValidateSpsPackageTests e test_revalidate_dispatches_task

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant