Skip to content

Aprimora o carregamento de artigos a partir do pid provider e passa a registrar erros no registro do pid provider#1422

Merged
robertatakenaka merged 4 commits intoscieloorg:mainfrom
robertatakenaka:evita_criar_artigo_sem_journal_ou_issue
Mar 26, 2026
Merged

Aprimora o carregamento de artigos a partir do pid provider e passa a registrar erros no registro do pid provider#1422
robertatakenaka merged 4 commits intoscieloorg:mainfrom
robertatakenaka:evita_criar_artigo_sem_journal_ou_issue

Conversation

@robertatakenaka
Copy link
Copy Markdown
Member

O que esse PR faz?

Este PR refatora a lógica de carregamento de artigos no módulo xmlsps.py e introduz um sistema de log de eventos para o PidProviderXML. As principais mudanças são:

  • Simplificação do load_article: A função agora exige obrigatoriamente um objeto pp_xml, removendo parâmetros legados e redundantes (v3, file_path, xml).
  • Rastreabilidade: Implementação do modelo XMLEvent para registrar o histórico de processamento (sucesso, falhas e exceções) diretamente no admin do Django.
  • Novos Status: Adicionado o status UNMATCHED para identificar casos onde o XML é válido, mas não encontra correspondência de Periódico ou Fascículo no sistema.

Onde a revisão poderia começar?

A revisão deve começar por pid_provider/models.py, onde o novo modelo XMLEvent e o método auxiliar add_event foram implementados, pois eles fundamentam a nova lógica de tratamento de erros no article/sources/xmlsps.py.

Como este poderia ser testado manualmente?

  1. Execute o processamento de um XML através da função load_article passando um pp_xml válido.
  2. Verifique no Admin do Django, dentro do objeto PidProviderXML correspondente, se a aba "Events" (ou lista relacionada) exibe o log do processamento.
  3. Force um erro (como um XML com periódico inexistente) e confirme se o status do pp_xml muda para UNMATCHED e se o erro detalhado foi registrado no XMLEvent.
  4. Tente processar um XML malformado e verifique se o status INVALID e a exceção foram devidamente capturados.

Algum cenário de contexto que queira dar?

Atualmente, quando o carregamento de um artigo falhava, era difícil rastrear o motivo exato sem consultar logs externos (Sentry/CloudWatch). Ao trazer os eventos para o banco de dados vinculados ao PidProviderXML, permitimos que a equipe de operações identifique rapidamente se um problema é de dados (XML) ou de infraestrutura diretamente pela interface administrativa.

Screenshots

(Adicione aqui um print da nova aba "Events" no Admin do PidProviderXML, se disponível)

Quais são tickets relevantes?

  • Relacionado à issue # (inserir número da issue aqui)

Referências

  • Documentação do django-modelcluster para o uso de ParentalKey.
  • Padrões de tratamento de exceções do projeto.

Alterada a lógica de carregamento para que a existência de 'journal'
e 'issue' seja verificada antes da chamada de Article.create_or_update.

Principais mudanças:
- Evita a criação ou atualização parcial de objetos Article quando as
  FKs obrigatórias estão ausentes.
- Remove chamadas redundantes a article.save() dentro dos blocos de erro,
  centralizando a persistência após a atribuição bem-sucedida.
- Melhora a clareza das mensagens de exceção incluindo o 'sps_pkg_name'.
@robertatakenaka robertatakenaka merged commit fcc5529 into scieloorg:main Mar 26, 2026
3 of 5 checks passed
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