basedosdados / basedosdados/pipelines
[chore] Remover pipelines/utils/metadata/poll.py — código morto após migração do CNES/comex_stat
- Dominant language
- Python
- Stars
- 49
- Forks
- 22
- Avg merge
- 19h 31m
- Merged PRs (30d)
- 165
Description
### Descrição
`pipelines/utils/metadata/poll.py` (`register_source_coverage`, `check_source_is_ahead_of_table`, `sync_table_coverage`, e os respectivos `_task` wrappers em `tasks.py`) foi criado como um mecanismo alternativo de poll pra corrigir o bug de `Table.Update` contaminado no CNES (documentado no README de `br_me_comex_stat`).
Comparando lado a lado com `register_table_materialization` (usado por ~27 outros flows), as duas funções são estruturalmente idênticas — mesmos passos (status, cobertura, Row Access Policies) — com uma única diferença: `sync_table_coverage` grava `Table.Update.latest` como a **competência** (`source_coverage`) em vez do **relógio** (`bq.last_modified()`). Isso resolve o gate de poll, mas quebra a semântica de `Table.Update.latest` em todo o resto do sistema (inclusive o que aparece como "última atualização" no site) — uma tabela ativa passava a exibir uma data de competência antiga em vez do timestamp real da última execução.
O mesmo resultado (comparar cobertura contra cobertura) já era alcançável com o mecanismo existente: `poll_source_for_update(..., compare_against="coverage")` já compara `source_max_date` contra `Coverage.DateTimeRange` (não contra `Table.Update`), e `register_table_materialization` já grava `Coverage` corretamente **e** `Table.Update` como relógio — sem a inconsistência.
`br_ms_cnes` e `br_me_comex_stat` (os dois únicos adotantes do `poll.py`) foram migrados de volta para o mecanismo padrão. Depois dessa migração, `poll.py` e seus wrappers (`register_source_coverage_task`, `check_source_is_ahead_of_table_task`, `sync_table_coverage_task`) ficam sem nenhum flow usando — só aparecem em testes próprios e num comentário de script auxiliar.
### Escopo afetado
- `pipelines/utils/metadata/poll.py` — remover o módulo inteiro.
- `pipelines/utils/metadata/tasks.py` — remover os wrappers `register_source_coverage_task`, `check_source_is_ahead_of_table_task`, `sync_table_coverage_task`.
- `pipelines/utils/tests/metadata/test_poll.py` — remover (testa só o módulo acima).
- Conferir se `register_source_coverage_task`/etc. não são importados em mais nenhum lugar antes de remover (na auditoria feita, só apareciam em `poll.py`, `tasks.py` e os próprios testes).
### Referências
- README de `br_me_comex_stat` (`pipelines/datasets/br_me_comex_stat/README.md`) — documenta o bug original e a decisão de criar o `poll.py`.
- Migração de volta ao padrão `poll_source_for_update(compare_against="coverage")` + `register_table_materialization` em `pipelines/crawler/datasus/flows.py` (`_run_cnes`) e `pipelines/datasets/br_me_comex_stat/flows.py`.
Contributor guide
Research direction
Start by searching the repository for imports and references to pipelines/utils/metadata/poll.py and its three task wrappers. Remove the module, wrappers, and pipelines/utils/tests/metadata/test_poll.py, then check the README and the two migrated flow files for context. Done means no remaining production references and the relevant metadata tests pass.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data-engineering
- Issue type
- Refactor
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 88/100