Melhoria monitoramento pid v2#961
Open
robertatakenaka wants to merge 30 commits into
Open
Conversation
Define os possíveis estados que uma página web de artigo pode ter: disponível, indisponível, conteúdo válido, conteúdo incompatível e não verificado. O tuple ARTICLE_WEBPAGE_STATUS usa as constantes definidas para evitar dessincronização.
…cação de conteúdo Expande os status possíveis de PID para refletir o novo fluxo de verificação: publicado, não encontrado no site público, conteúdo válido no site público, conteúdo incompatível no site público, encontrado no site clássico, conteúdo compatível no site clássico, conteúdo incompatível no site clássico e não encontrado no site clássico.
…onfiguration Inclui campo url no modelo Collection para armazenar o endereço do site da coleção. Adiciona método estático get_website_url em WebSiteConfiguration que retorna a URL do site conforme o propósito (público ou QA), tratando casos de múltiplos registros. Adiciona property public_website_url como atalho para obter a URL do site público da coleção.
Cria property que retorna a URL do site clássico a partir do campo url da coleção associada. Levanta ValueError se a coleção não tiver URL definida.
Novo módulo com funções utilitárias para o sistema de verificação de disponibilidade de artigos: - format_url: monta URL do site novo (OPAC) para um artigo - format_classic_url: monta URL do site clássico (scielo.php) - check_url: busca conteúdo de uma URL via fetch_data - check_content: compara metadados do artigo com conteúdo HTML, calculando taxa de correspondência (found/total) - check_metadata: verifica presença exata de cada metadado no texto usando normalização Unicode (sem acentos, lowercase) - compute_rate: calcula percentual de metadados encontrados
…e de artigos Novo modelo ArticleWebPage que registra o status de cada página web de um artigo (HTML/PDF, site novo/clássico) por coleção, com verificação de disponibilidade e validação de conteúdo via page_checker. Campo url com max_length=265 para comportar URLs completas do SciELO. Substitui get_urls por get_webpage_items, que retorna dicionários com url, formato, idioma e tipo de site, e aceita filtros (classic, new, html, pdf). Adiciona método check_is_public e is_completed para consultar o status consolidado das páginas web, com fallback para o legado availability_status usando o campo available. Adiciona check_availability que orquestra a verificação criando ou atualizando registros ArticleWebPage e retornando dict com completed, webpages e response do legado. Adiciona get_metadata_by_lang e get_metadata_items que extraem metadados do artigo (títulos, DOIs, seções, autores, PIDs, paginação) por idioma para validação de conteúdo. Adiciona availability_stats para estatísticas de status por coleção. Refatora choose_item_to_keep para usar check_is_public() e update_availability_status para delegar a update_article_availability_status.
…tems Adiciona parâmetro retry em create_or_update, create_or_update_urls e ScieloURLStatus para controlar quando re-verificar URLs já disponíveis. Adapta create_or_update_urls para usar get_webpage_items em vez do antigo get_urls, extraindo a URL do dicionário retornado. Renomeia método retry para update_urls_status com lógica de filtragem que só re-verifica indisponíveis a menos que force_update seja True. Renomeia check_is_completed para update_completed. Adiciona property data para serialização do status de disponibilidade.
…lity Substitui a criação manual de ArticleAvailability e chamada separada de create_or_update_urls por uma única chamada a article.check_availability, que centraliza toda a lógica de verificação de disponibilidade.
Arquivo continha funções duplicadas (log_event e schedule_article_publication) que já existem em proc/article_controller.py.
Abordagem de criação de procs a partir de arquivo de lista de PIDs substituída pelo ClassicWebsiteArticlePidTracker, que obtém a lista de PIDs diretamente da configuração do site clássico e faz a reconciliação de forma mais robusta.
Atualiza imports e __all__ para refletir a remoção da função, que foi substituída pelo ClassicWebsiteArticlePidTracker.
…icação O tracker agora recebe a coleção no construtor e obtém internamente as configurações do site clássico e público, eliminando a necessidade de passar esses dados externamente. Define COMPLETED_STATUSES agrupando os status que indicam verificação concluída (MATCHED, PUBLISHED, PUBLIC_VALID, PUBLIC_MISMATCHED). Método update_pid_status é o ponto de entrada que busca a lista de PIDs, converte para set e chama _update_pid_status internamente. bulk_create retorna estatísticas de pid_status via ArticleProc.get_pid_status_total. Remove função standalone track_classic_website_article_pids, cuja lógica foi absorvida pelo construtor e update_pid_status.
Adiciona get_pid_status_total para contagem de artigos por status de PID numa coleção. Adiciona properties classic_website_url e public_website_url para acessar URLs dos sites a partir da coleção do ArticleProc. Adiciona items_to_check_url_and_content que filtra artigos excluindo os status que não precisam de verificação (MISSING, EXCEEDING, UNKNOWN, e opcionalmente PUBLIC_VALID). Adiciona check_published_pid_v2 que verifica o artigo no site clássico e no site público, mapeando o status retornado por check_availability para o pid_status correspondente (PUBLIC_VALID, PUBLIC_NOT_FOUND, PUBLIC_MISMATCHED). Adiciona check_classic_website_content que busca o conteúdo da URL do site clássico, compara com os metadados do artigo e atualiza o pid_status para CLASSIC_FOUND, CLASSIC_MATCHED, CLASSIC_MISMATCHED ou CLASSIC_NOT_FOUND.
Adiciona docstring do módulo com mapa hierárquico de todas as tasks e docstrings em todas as tasks e funções auxiliares. Remove tasks task_create_procs_from_pid_list e task_create_collection_procs_from_pid_list, substituídas pelo novo fluxo baseado em ClassicWebsiteArticlePidTracker. Cria task_track_classic_website_article_pids_for_collection que executa o rastreamento de PIDs e agenda verificações individuais de URL e conteúdo para cada artigo elegível. Cria task_track_article_page_url_and_content que verifica URL e conteúdo de um artigo individual, passando user, timeout e force_update para check_published_pid_v2. Refatora task_publish_article para usar article.check_availability em vez de criar ArticleAvailability manualmente e iterar sobre WebSiteConfigurations.
Cria MultiFieldPanel 'Article webpages' com InlinePanel para article_webpages e inclui no panels principal.
Apaga publication/tests.py que testava o fluxo antigo baseado em ArticleAvailability e ScieloURLStatus, substituído pelo pipeline ArticleWebPage.
Remove json, logging e datetime que não são mais referenciados após refatoração do módulo de publicação.
Quando o split por '<body' falha, normaliza espaços e trunca o conteúdo em 3000 caracteres em vez de usar o HTML completo, evitando comparações desnecessariamente pesadas.
Mudanças principais: - ArticleWebPage.collection → ArticleWebPage.website (FK para WebSiteConfiguration), com unique_together e indexes atualizados. - Novo campo Article.fpage_seq. - Article.__str__ seguro contra AttributeError. - get_webpage_items desmembrado em get_html_urls e get_pdf_urls com parâmetro only_first para verificações rápidas. - check_availability/update_availability_status removidos; substituídos por create_or_update_urls, get_check_url_and_params, check_webpages_availability, all_webpages_available, any_webpage_available e public_webpages. - is_completed e check_is_public removidos. - choose_item_to_keep reescrito com annotate SQL (has_valid_public_webpage, has_pp_xml) em vez de loops Python. - exclude_repetitions com pré-ranking SQL e check HTTP restrito aos 2 melhores candidatos. - get_availability_stats aceita collection e website opcionais. - check_availability de ArticleWebPage recebe user e busca article_metadata automaticamente se não fornecido. - Docstrings NumPy adicionadas em todos os métodos públicos.
Alinha o comentário em migration/tasks.py com a renomeação do parâmetro em BaseProc.publish.
Adiciona comentário '# sem uso?' à função migrate_collection_articles em proc/article_controller.py.
Mudanças principais: - BaseProc.publish: callable_publish → api_publish_callable. - ArticleProc: novas properties public_website, qa_website, public_website_url, qa_website_url (com tratamento de exceção). - ArticleProc.create_article_webpages cria URLs em QA e PUBLIC. - check_classic_website_content recebe user, usa get_html_urls e get_pdf_urls com only_first, delega para check_classic_page_url_and_content. - check_published_pid_v2 removido; lógica distribuída entre check_classic_website_content e tasks de verificação. - set_pid_status salva apenas se houve mudança. - available_status_delete para limpeza de registros legados. - all_webpage_available e any_webpage_available delegam para Article. - IssueProc.select_items: novos parâmetros collection_acron, journal_acron, issue_proc_id. - ArticleProc.select_items: novos parâmetros collection_acron, journal_acron, issue_folder, publication_year, issue_proc_id, article_proc_id_list. - Docstrings NumPy em Operation, ProcReport, BaseProc, JournalProc, IssueProc, ArticleProc e métodos principais.
…articles_availability Alinha o scheduler com a nova assinatura da task de verificação em lote de disponibilidade de artigos.
Mudanças principais:
- task_sync_issue desmembrada: task_publish_issue_articles itera
sobre WebSiteConfigurations habilitados, publica artigos (síncrono)
e agenda task_sync_issue (assíncrono) por website.
- task_publish_article recebe website_id, agenda
task_check_article_webpages após publicação bem-sucedida em vez
de chamar ArticleAvailability diretamente.
- Novas tasks de verificação granular:
- task_check_article_webpages: cria/atualiza URLs e verifica
cada webpage sincronamente.
- task_check_article_page_availability: verifica uma única
ArticleWebPage.
- task_update_article_proc_availability: callback que atualiza
pid_status no ArticleProc.
- task_check_articles_availability: verificação em lote por filtros
(substitui task_check_article_availability).
- task_check_classic_website_article: verificação isolada no site
clássico (migração).
- task_check_main_article_page_availability: verifica se alguma
webpage está disponível.
- task_exclude_article_repetition_by_issue renomeada para
task_exclude_invalid_issue_articles.
- task_publish_articles simplificada: seleciona IssueProcs e
delega para task_publish_issue_articles.
- task_track_article_page_url_and_content removida; substituída
por task_check_classic_website_article.
- Import de ArticleAvailability removido.
- TaskExecution: docstrings expandidas.
- Docstrings atualizadas em todas as tasks com hierarquia
documentada no cabeçalho do módulo.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que esse PR faz?
Implementa um sistema de verificação de disponibilidade e validação de conteúdo das páginas web dos artigos nos sites público e clássico do SciELO.
Cria o modelo
ArticleWebPageque registra, para cada artigo, o status de cada combinação de URL/formato/idioma/coleção (disponível, conteúdo válido, conteúdo incompatível, etc.).Refatora o
ClassicWebsiteArticlePidTrackerpara estender o fluxo de rastreamento: MISSING → MATCHED → verificação de URL no site clássico → verificação de conteúdo → verificação no site público, atualizando opid_statusem cada etapa.Centraliza a lógica de verificação no método
Article.check_availability, usado tanto pela publicação quanto pelo rastreamento de PIDs.Adiciona
get_metadata_itemsque extrai metadados do artigo (títulos, DOIs, autores, seções, PIDs, paginação) para validação contra o conteúdo da página web.Remove
create_collection_procs_from_pid_listearticle_publication_controller.py(código duplicado), e refatora as tasks Celery para um fluxo mais granular com docstrings completas.Onde a revisão poderia começar?
Por
article/choices.pyemigration/choices.pypara entender os novos status, depoisarticle/models.py(modeloArticleWebPagee métodoscheck_availability,get_webpage_items,get_metadata_items), e por fimproc/article_controller.py(refatoração do tracker) eproc/tasks.py(novo fluxo de tasks).Como este poderia ser testado manualmente?
Collection.urle umWebSiteConfigurationcom URL do site públicotask_track_classic_website_article_pidspara uma coleçãoArticleProctêm seuspid_statusatualizados progressivamente (MISSING → MATCHED → CLASSIC_FOUND → CLASSIC_MATCHED)ArticleWebPagesão criados com status corretostask_publish_articlee verificar quearticle.check_availabilitycria osArticleWebPagee atualiza oArticleAvailabilitylegadoAlgum cenário de contexto que queira dar?
O sistema anterior verificava apenas se as URLs retornavam HTTP 200, sem validar o conteúdo. O novo fluxo compara metadados do artigo com o conteúdo da página, atribuindo uma taxa de correspondência. O modelo
ArticleWebPagesubstitui gradualmente oArticleAvailabilitylegado, mas ambos coexistem durante a transição.O rastreamento de PIDs foi expandido: antes parava em MATCHED, agora continua verificando URL e conteúdo nos sites clássico e público. O
check_published_pid_v2mapeia o status das webpages para opid_statusdo ArticleProc, permitindo rastrear o progresso completo.Screenshots
N/A
Quais são tickets relevantes?
Referências