agrobr v1.0.0
agrobr 1.0.0
Infraestrutura Python para dados agrícolas brasileiros. 26 fontes públicas, 34 datasets semânticos, 5100+ testes, 88% cobertura.
pip install agrobr==1.0.0
Highlights
- 34 datasets semânticos com fallback automático entre fontes — peça o dado, a fonte é detalhe interno
- 26/26 fontes com golden tests (21 com dados reais) — CEPEA, CONAB, IBGE, NASA POWER, BCB/SICOR, ComexStat, ANDA, ABIOVE, USDA, IMEA, DERAL, INMET, Notícias Agrícolas, Queimadas/INPE, Desmatamento PRODES/DETER, MapBiomas, B3 Futuros, CONAB CEASA, UN Comtrade, ANTAQ, ANP Diesel, MAPA PSR, ANTT Pedágio, SICAR, ZARC
- Contratos formais — schema versionado, primary keys, validação automática em todo fetch
as_polars=Trueem todas as 51 source APIs — suporte Polars completo- Modo determinístico + snapshots — reprodutibilidade total para papers e auditorias
- CLI funcional —
agrobr cepea indicador soja --ultimo,agrobr conab safras soja,agrobr snapshot create py.typed— PEP 561, type checking em projetos downstream
Novos Datasets (desde v0.12.0)
| Dataset | Descrição | Fonte |
|---|---|---|
| movimentacao_portuaria | Carga em portos (granel, geral, contêiner) | ANTAQ |
| condicao_lavouras | Condição semanal das lavouras PR | DERAL |
| oferta_demanda_global | Oferta/demanda global de commodities | USDA PSD |
| comercio_internacional | Comércio bilateral por HS code | UN Comtrade |
| zoneamento_agricola | Janelas de plantio por município/cultura/solo | ZARC/MAPA |
| desmatamento | PRODES consolidado + DETER alertas | INPE |
| uso_do_solo | Cobertura terra anual (1985-presente) | MapBiomas |
| queimadas | Focos de calor por satélite (6 biomas) | INPE |
| clima | Dados climáticos mensais/diários | INMET → NASA POWER |
| futuros_agricolas | Ajustes, histórico, posições abertas | B3 |
| serie_historica_safra | 32 culturas desde 1976/77 | CONAB |
| preco_atacado | Hortifrúti em 43 CEASAs | CONAB CEASA |
| seguro_rural | Apólices e sinistros | MAPA PSR |
| importacao | Importações por NCM | ComexStat |
| pib_agro | PIB agropecuário trimestral | IBGE SIDRA |
| progresso_safra | Progresso semanal plantio/colheita | CONAB |
Performance
- Retry com transport exceptions —
TimeoutException,NetworkError,RemoteProtocolErroragora têm retry exponencial em 24+ clients (antes: zero retries para falhas de rede) - Concorrência configurável — RateLimiter com semáforo por fonte (B3 e IBGE: 3 requests simultâneos)
- B3 ~4.4x mais rápido —
historico()eoi_historico()migrados de while-loop sequencial paraasyncio.gather() - IBGE gather —
lspa(),censo_agro()em paralelo (~3x speedup) - Client pooling — INMET e NASA POWER reutilizam
AsyncClientem vez de criar um por request - B3 ZIP nativo —
ajustes()usa BVBG-086 XML streaming (fallback HTML legado)
Qualidade Interna
- ~2500 linhas de código removidas em 3 ciclos de simplificação (
/simplify,/simplify2,/simplify3) - Dead code purge — 5 módulos mortos,
cache/history.pyinteiro, 8 métodos DuckDB, 32 TTL fields mortos - Helpers canônicos —
finalize_result,build_source_meta,safe_float,parse_numeric_br,detect_encoding_chain,warn_once,get_timeout,read_csv_safe,validate_year_uf - IBGE module split —
api.py(2025 linhas) → 4 módulos especializados - Excel resiliente —
python-calaminecomo fallback para XLSX malformados (9 parsers)
Bugfixes
sidrapyroda viaasyncio.to_thread()(desbloqueava event loop em todas as queries IBGE)RateLimiterdetecta troca de event loop (crashava em chamadas sequenciais comasyncio.run())- Cache timezone UTC consistente (
datetime.utcnow()deprecated →utcnow()helper) comtrade/comexstat/exportacaodefaults corrigidos para ano anterior (dados completos)bcbfallback BigQuery acionado em HTTP 403/404 (antes propagava sem tentar)sicarvalores BR (vírgula decimal) normalizados antes depd.to_numeric- Encoding validação contra conteúdo completo (não apenas sample 4KB)
- Wheel distribuído sem módulos internos (
health/,alerts/,benchmark/)