Refatoração do pipeline de artigos: article, controller e tasks
Contexto
O ArticleIteratorBuilder atual usa um único __iter__ que dispara todos
os iteradores de seleção (harvest, article_source, pid_provider, article)
simultaneamente. Isso permite que o mesmo artigo/pp_xml_id seja
selecionado por mais de uma fonte na mesma execução, gerando risco de
processamento duplicado e dificultando o rastreio de qual fonte originou
cada despacho.
Além disso, ArticleSource depende do modelo legado AMArticle
(am_article FK), o que acopla o pipeline novo a uma estrutura em
desuso, e há bastante logging.info/logging.exception de baixo valor
espalhado pelo código, dificultando a leitura dos logs relevantes.
Objetivo
- Separar o fluxo de harvest (coleta externa via OPAC/ArticleMeta) do
fluxo de despacho das fontes internas pendentes, criando a task
task_harvest_articles e simplificando task_dispatch_articles.
- Eliminar a sobreposição entre iteradores, tornando explícita qual fonte
está sendo usada em cada chamada (from_pid_provider, from_article,
from_article_source, from_harvest).
- Desacoplar
ArticleSource de AMArticle, substituindo por pid e
collection.
- Reduzir logging redundante e simplificar o tratamento de erros em
add_pid_provider, request_xml e request_pid.
- Cobrir o novo comportamento com testes unitários (
unittest.mock),
suprimindo ruído de logging do OpenSearch nos testes.
Escopo
article/controller.py
article/models.py
article/tasks.py
article/wagtail_hooks.py
article/migrations/0050_remove_articlesource_am_article_and_more.py
article/tests/test_article_iterator_builder.py
article/tests/test_article_pipeline.py
bigbang/tasks_scheduler.py
journal/models.py
pid_provider/choices.py
Critérios de aceite
Referências
Refatoração do pipeline de artigos: article, controller e tasks
Contexto
O
ArticleIteratorBuilderatual usa um único__iter__que dispara todosos iteradores de seleção (harvest, article_source, pid_provider, article)
simultaneamente. Isso permite que o mesmo artigo/
pp_xml_idsejaselecionado por mais de uma fonte na mesma execução, gerando risco de
processamento duplicado e dificultando o rastreio de qual fonte originou
cada despacho.
Além disso,
ArticleSourcedepende do modelo legadoAMArticle(
am_articleFK), o que acopla o pipeline novo a uma estrutura emdesuso, e há bastante
logging.info/logging.exceptionde baixo valorespalhado pelo código, dificultando a leitura dos logs relevantes.
Objetivo
fluxo de despacho das fontes internas pendentes, criando a task
task_harvest_articlese simplificandotask_dispatch_articles.está sendo usada em cada chamada (
from_pid_provider,from_article,from_article_source,from_harvest).ArticleSourcedeAMArticle, substituindo porpidecollection.add_pid_provider,request_xmlerequest_pid.unittest.mock),suprimindo ruído de logging do OpenSearch nos testes.
Escopo
article/controller.pyarticle/models.pyarticle/tasks.pyarticle/wagtail_hooks.pyarticle/migrations/0050_remove_articlesource_am_article_and_more.pyarticle/tests/test_article_iterator_builder.pyarticle/tests/test_article_pipeline.pybigbang/tasks_scheduler.pyjournal/models.pypid_provider/choices.pyCritérios de aceite
pp_xml_idé selecionado por mais de uma fonte namesma execução de
task_dispatch_articles.ArticleSourcenão depende mais deAMArticle.task_harvest_articlesetask_dispatch_articlesagendadascorretamente no scheduler, com as tasks obsoletas removidas.
from_*doArticleIteratorBuildere os 3 pontos de entrada detask_process_article_pipeline.Referências