v0.9.0
agrobr 0.9.0 — Quality & Resilience
Foco total em qualidade, resiliência e confiabilidade da biblioteca.
Highlights
- 1500+ testes (era 949), cobertura ~75% (era 57.5%)
- 13/13 fontes com golden tests (era 2/13)
- 10 bugs corrigidos incluindo histórico DuckDB que nunca salvava dados
- Resiliência HTTP completa: retry centralizado, 429/Retry-After handling
- INMET atualizado: novo endpoint + suporte a token de autenticação
- Benchmark de escalabilidade validado: memory, volume, cache, async
Fixed
- Cache DuckDB:
history_entries.idsem autoincrement — histórico permanente nunca salvava dados normalizar_safra()não fazia strip no input (" 2024 / 25 " falhava)- 6 clients sem retry para HTTP 429 (INMET, NASA POWER, CONAB, IBGE)
- Graceful degradation silenciosa →
SourceUnavailableErrorquando retry esgota except Exceptiongenérico no cache restringido para exceções específicas- INMET: endpoint
/estacao/dados/→/estacao/(API mudou) - INMET: HTTP 204 (No Content) retorna DataFrame vazio sem erro
Added
retry_on_status()eretry_async()centralizados emhttp/retry.py- Suporte a Retry-After header em respostas 429
- Token INMET via
AGROBR_INMET_TOKEN(env var) - Golden tests para todas as 13 fontes de dados
- Testes de resiliência HTTP para todos os clients
- Testes da API pública:
indicador(),ultimo(),safras(),balanco(),brasil_total() - Benchmark de escalabilidade: memory profiling, volume scaling, cache stress, async performance
Changed
- Retry de 5 clients migrado para
http/retry.pycentralizado - Testes de datasets refatorados: 98 funções duplicadas → 27 parametrizadas (115 cenários)
- Pre-commit hooks atualizados (ruff v0.15, mypy v1.19)
Breaking Changes
Nenhum. API pública mantida.
Upgrade
pip install --upgrade agrobrKnown Issues
indicadores_upsertcom 50k+ records escala não-linearmente- 5 golden tests com dados sintéticos (BCB, INMET, USDA, ComexStat, NA)
- 7 clients legados com retry loop próprio (migração pra
retry_on_statusno roadmap)
Feedback e issues: https://github.com/brunoescalhao/agrobr/issues