Descrição
Este trabalho tem como objetivo central reduzir o número de modelos de evento
específicos (ArticleEvent, XMLEvent) usados hoje para registrar progresso
e falhas no pipeline de processamento de artigos, consolidando esse registro
em UnexpectedEvent — modelo já existente e mais genérico — sempre que
possível.
Motivação:
ArticleEvent/XMLEvent exigem a criação prévia de um objeto de evento
(article.add_event(...)), o que gera ramificações de código do tipo
if event: ... else: ... e falha silenciosa quando o evento não chega a
ser criado (ex.: artigo ainda não existe, ou exceção ocorre antes da
criação do evento).
UnexpectedEvent.create(...) não depende de um objeto de evento
pré-existente, é chamado de forma incondicional, e pode receber contexto
suficiente (action, item, detail) para diagnóstico, sem exigir um
modelo dedicado por entidade (ArticleEvent para artigo, XMLEvent para
XML, etc.).
- Menos modelos de evento significa menos migrations, menos tabelas para
manter, e uma única fonte de consulta para diagnosticar falhas em todo o
pipeline (article, proc, pid_provider).
Escopo desta etapa
article/tasks.py: task_export_article_to_articlemeta,
task_process_article_pipeline — padronizar chamadas a
UnexpectedEvent.create(action=..., item=..., detail=...).
article/sources/xmlsps.py: load_article — remove uso de
ArticleEvent (add_event/event.finish), substituindo por uma função
finish(article, errors, messages) que grava direto em article.errors.
article/models.py: Article.check_availability — remove dependência do
event (ArticleEvent), chamando UnexpectedEvent.create(...)
incondicionalmente.
Fora de escopo (próximas etapas)
- Remoção efetiva dos modelos
ArticleEvent/XMLEvent do banco (migration
de remoção), caso este PR confirme que nenhum outro ponto do código ainda
depende deles.
- Avaliar
pid_provider (XMLEvent) para o mesmo tratamento.
Critérios de aceite
Descrição
Este trabalho tem como objetivo central reduzir o número de modelos de evento
específicos (
ArticleEvent,XMLEvent) usados hoje para registrar progressoe falhas no pipeline de processamento de artigos, consolidando esse registro
em
UnexpectedEvent— modelo já existente e mais genérico — sempre quepossível.
Motivação:
ArticleEvent/XMLEventexigem a criação prévia de um objeto de evento(
article.add_event(...)), o que gera ramificações de código do tipoif event: ... else: ...e falha silenciosa quando o evento não chega aser criado (ex.: artigo ainda não existe, ou exceção ocorre antes da
criação do evento).
UnexpectedEvent.create(...)não depende de um objeto de eventopré-existente, é chamado de forma incondicional, e pode receber contexto
suficiente (
action,item,detail) para diagnóstico, sem exigir ummodelo dedicado por entidade (
ArticleEventpara artigo,XMLEventparaXML, etc.).
manter, e uma única fonte de consulta para diagnosticar falhas em todo o
pipeline (
article,proc,pid_provider).Escopo desta etapa
article/tasks.py:task_export_article_to_articlemeta,task_process_article_pipeline— padronizar chamadas aUnexpectedEvent.create(action=..., item=..., detail=...).article/sources/xmlsps.py:load_article— remove uso deArticleEvent(add_event/event.finish), substituindo por uma funçãofinish(article, errors, messages)que grava direto emarticle.errors.article/models.py:Article.check_availability— remove dependência doevent(ArticleEvent), chamandoUnexpectedEvent.create(...)incondicionalmente.
Fora de escopo (próximas etapas)
ArticleEvent/XMLEventdo banco (migrationde remoção), caso este PR confirme que nenhum outro ponto do código ainda
depende deles.
pid_provider(XMLEvent) para o mesmo tratamento.Critérios de aceite
article.add_event(...)foi introduzida nosarquivos alterados.
UnexpectedEvent.create(...)no escopo usamactioneitemde forma consistente.load_articlepersiste erros e mensagens de progresso emarticle.errors, sem depender deArticleEvent.logging,sys,etree,Location,PPXML_STATUS_*,PidProviderXML,UnexpectedEventonde não mais usado em
xmlsps.py).ArticleEvent/XMLEventainda restam no restante do código, paraplanejar a remoção dos modelos.