Skip to content

Validar pacote SPS no admin Wagtail #92

@gitnnolabs

Description

@gitnnolabs

Descrição da nova funcionalidade

Eu, como editor ou administrador com acesso ao admin do Wagtail (utilizador staff), gostaria de enviar um pacote SPS em formato .zip por um formulário no admin, tê-lo registado como documento Wagtail e obter um relatório .csv gerado pelo packtools para revisão humana, então posso verificar a conformidade do pacote antes de publicar ou integrá-lo no fluxo editorial da plataforma SciELO RCT.

A funcionalidade deve manter sempre a versão mais recente da validação para cada pacote: um único registo por ficheiro .zip (documento Wagtail), com revalidação a substituir o CSV, as exceções e os metadados (utilizador, data e tamanho do zip).

Critérios de aceitação

Para que esta tarefa seja considerada concluída, devem ser contemplados os seguintes pontos:

  1. Interface no admin Wagtail: existe um formulário acessível no menu do admin (snippet ou grupo de snippets) com o rótulo adequado (ex.: «Validar pacote SPS»), permitindo selecionar ou enviar um ficheiro .zip.
  2. Documento Wagtail: o .zip enviado é guardado como wagtaildocs.Document (extensão zip já permitida nas definições do projeto) e associado ao registo de validação.
  3. Validação com packtools: após o envio, o pacote é validado com packtools (versão fixada no projeto, 4.12.6), extraindo o conteúdo do zip e aplicando o mesmo mecanismo de relatório usado para XML (XMLDataChecker), produzindo um ficheiro .csv para avaliação humana e um ficheiro de exceções (JSON/JSONL), alinhado ao fluxo existente em xml_manager.
  4. Processamento assíncrono: a validação corre em tarefa Celery (padrão de xml_manager), com indicação de estado no admin (ex.: pendente, em execução, concluída, erro).
  5. Versão mais recente: existe um registo por pacote (ligado ao wagtaildocs.Document). Nova validação do mesmo documento substitui o CSV, o ficheiro de exceções e atualiza os metadados — sem manter histórico de ficheiros de validação anteriores.
  6. Metadados obrigatórios visíveis no admin: utilizador que realizou a validação, data e hora da validação, tamanho do .zip em bytes no momento da validação.
  7. Download do relatório: na listagem e/ou detalhe do registo, links para descarregar o CSV e o ficheiro de exceções (quando existirem), de forma análoga às colunas de ficheiros em xml_manager.
  8. Permissões: apenas utilizadores com acesso ao admin Wagtail (staff) podem criar validações e ver resultados.
  9. Tratamento de erros: zip inválido, falha na extração ou erro na validação packtools devem ser comunicados no admin (mensagem e/ou estado de erro), sem deixar o registo inconsistente.
  10. Validação do formulário: aceitar apenas ficheiros com extensão .zip; rejeitar envios vazios ou com tipo incorreto com mensagem clara.

Anexos

N/A

Referências

  • Fluxo análogo (validação XML + CSV): xml_manager/models.py, xml_manager/utils.py, xml_manager/tasks.py, xml_manager/wagtail_hooks.py
  • packtools (dependência): requirements/base.txt (scieloorg/packtools@4.12.6)
  • Extensões de documentos Wagtail: config/settings/base.py (WAGTAILDOCS_EXTENSIONS, inclui zip)

Notas técnicas (orientação à implementação)

Decisão Escolha
App Estender xml_manager (já integra packtools e snippets Wagtail).
Modelo sugerido SPSPackageValidation com FK única a wagtaildocs.Document, validation_file, exceptions_file, zip_size_bytes, validated_at, validated_by, status.
packtools Extrair zip para diretório temporário; XMLDataChecker(csv, exceptions, extracted_dir).validate(params={}, csv_per_xml=False).
Revalidação Sobrescrever artefatos e metadados no mesmo registo (UniqueConstraint em package_document).

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions