Skip to content

Validar pacote SPS no admin MakrAPI#93

Merged
gitnnolabs merged 1 commit into
mainfrom
add_xml_validation_interface
May 18, 2026
Merged

Validar pacote SPS no admin MakrAPI#93
gitnnolabs merged 1 commit into
mainfrom
add_xml_validation_interface

Conversation

@gitnnolabs
Copy link
Copy Markdown
Contributor

O que esse PR faz?

Implementa no admin Wagtail (grupo Gestão de XML) o snippet Validar pacote SPS

  • Modelo SPSPackageValidation: pacote .zip em wagtaildocs.Document (OneToOneField), relatórios de validação e exceções como documentos Wagtail, estados pending / running / done / error, metadados (validated_by, validated_at, zip_size_bytes, error_message).
  • Formulário SPSPackageValidationForm: upload obrigatório na criação; na edição, .zip opcional (vazio = revalidar o pacote atual); validação de extensão e ficheiro vazio.
  • Admin Wagtail: SnippetViewSet com listagem (pacote, tamanho, utilizador, data, estado, links para CSV e JSON), criação/edição customizadas, botão Revalidar na listagem, copy_view_enabled = False.
  • View revalidate_sps_package_pk: repõe estado pending e metadados antes de enfileirar validação.
  • Signal post_delete: remove pacote e relatórios Wagtail associados sem recursão em pre_delete.
  • Testes em xml_manager/tests/test_sps_package_validation.py: formulário, eliminação de documentos ligados, revalidação (staff / 404).

Âmbito de ficheiros

Área Ficheiros
Modelo / migração xml_manager/models.py, migrations/0004_spspackagevalidation.py
Admin xml_manager/forms.py, wagtail_hooks.py, views.py, urls.py
Limpeza xml_manager/signals.py, apps.py
Config config/settings/base.py (json em WAGTAILDOCS_EXTENSIONS)
Testes xml_manager/tests/test_sps_package_validation.py

Pendências conhecidas:

No estado atual do repositório

@Rossi-Luciano validação em wagtail_hooks.py (create/edit) e views.revalidate_sps_package_pk têm comentários

# TODO: here add the code to validate the package

Onde a revisão poderia começar?

  1. xml_manager/models.pySPSPackageValidation e estados.
  2. xml_manager/wagtail_hooks.py — fluxo create/edit, listagem e botão Revalidar.
  3. xml_manager/signals.py — limpeza ao apagar registo.
  4. xml_manager/tests/test_sps_package_validation.py.

Como este poderia ser testado manualmente?

  1. Aplicar migrações: make django_migrate (ou docker compose -f local.yml run --rm django python manage.py migrate).
  2. Subir Django e worker Celery; aceder ao admin Wagtail como utilizador staff.
  3. Gestão de XMLValidar pacote SPSAdicionar.
  4. Enviar um .zip SPS de teste; confirmar mensagem de validação iniciada e registo em estado pending / running.
  5. Clicar Revalidar na listagem (ou editar sem novo ficheiro): confirmar que CSV/JSON anteriores são substituídos e metadados atualizados.
  6. Editar com novo .zip: confirmar substituição do pacote e nova validação.
  7. Apagar o registo: confirmar que os três documentos Wagtail (zip, CSV, JSON) deixam de existir.
  8. Caso de erro (zip inválido): estado error e mensagem em error_message.
  9. Testes automatizados: make pytest ou docker compose -f local.yml run --rm django pytest xml_manager/tests/test_sps_package_validation.py --reuse-db.

Algum cenário de contexto que queira dar?

  • Reutiliza o padrão de validação XML já existente em xml_manager (validate_xml_document, XMLDataChecker).
  • Um registo por pacote (OneToOneField em package_document); revalidação sobrescreve artefatos no mesmo registo, sem histórico de versões anteriores.
  • O signal usa post_delete (não pre_delete) para evitar RecursionError ao apagar documentos com CASCADE.
  • A listagem usa __str__ como primeira coluna para manter o link Editar do Wagtail.

Screenshots

Screenshot 2026-05-18 at 15 34 48

Quais são tickets relevantes?

#92

Referências

  • SciELO RCT — validação SPS com packtools (.cursor/rules/project-objectives.mdc)
  • packtools XMLDataCheckerrequirements/base.txt (scieloorg/packtools@4.12.6)
  • WAGTAILDOCS_EXTENSIONS em config/settings/base.py

@gitnnolabs gitnnolabs requested a review from Rossi-Luciano May 18, 2026 19:14
@gitnnolabs gitnnolabs self-assigned this May 18, 2026
@gitnnolabs gitnnolabs added the enhancement New feature or request label May 18, 2026
@gitnnolabs gitnnolabs merged commit 43b5b93 into main May 18, 2026
6 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant