basedosdados / basedosdados/pipelines

[chore] Remover pipelines/utils/metadata/poll.py — código morto após migração do CNES/comex_stat

Open
#1,882 1 comment 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.