Releases: Datos-Mexico/datos-mexico-py
v0.2.1 — Pulido académico integral del SDK
Pulido académico integral del SDK. Sin cambios en la API pública, cero breaking changes.
- PyPI: https://pypi.org/project/datos-mexico/0.2.1/
- Docs: https://docs.datosmexico.org
- Instalación:
pip install --upgrade datos-mexico
[0.2.1] — 2026-05-13
Pulido académico integral del SDK sin cambios en la API pública. Cero breaking changes para usuarios existentes. Cambios concentrados en infraestructura de reproducibilidad, metadata académica, sincronización docs↔código, y robustez operacional.
Added
- Snapshot OpenAPI versionado (
openapi/openapi.snapshot.json, 14,727 líneas) como registro citable del contrato API al momento del release. - Detección automática de drift entre snapshot y API live:
- Workflow continuo
openapi-drift.ymlen cada push y PR. - Workflow cron diario
openapi-drift-cron.ymlcon gestión automática de issues. - Política: drift es información, no error; CI no falla por drift.
- Workflow continuo
- Script de actualización del snapshot
openapi/update_snapshot.pyidempotente. - Deploy automático de docs a Cloudflare Pages (
docs-deploy.yml) en cada push a main que toquedocs/,mkdocs.yml, osrc/**. - Test de reproducibilidad permanente del README (
tests/test_readme_examples.py): extrae bloques de código del README, validacompile(), y opcionalmente ejecuta contra la API real. - Coverage report como artifact en GitHub Actions (XML + HTML) con badge en README.
requirements-dev.txtcon hashes SHA256 desdeuv.lockpara reproducibilidad CI universal.- Script
scripts/sync_requirements.shpara regenerar el lockfile + requirements export. - Script
scripts/regen_docs_figures.pycon tres modos (dry-run,--apply,--verify) para mantener cifras vivas sincronizadas con la API. - Sección "Cortar un release" en
docs/contributing.mddocumentando el proceso completo (10 pasos). - Sección "Reproducibilidad del entorno" en
docs/contributing.mddocumentando pathsuvypip --require-hashes. - Sección "Gestión del drift del OpenAPI spec" en
docs/contributing.md. - Sección "Secretos requeridos por CI/CD" en
docs/contributing.md. - Labels
openapi-driftyautomateden el repositorio GitHub para gestión automática de issues por el cron.
Changed
- CITATION.cff consolidada como fuente única de metadata académica según schema CFF 1.2.0; campo
type: softwareexplicitado. - BibTeX canónico alineado byte a byte en README,
docs/citation.md, y notebook Amafore. Tipo@software(no@misc), author corporativo con brace doble{{Equipo de Datos México}}para preservar entidad en parsers BibTeX, URL apuntando al repositorio del código, campos completos (year,month,version,url,publisher,license,note). - README "Uso rápido" corregido: el primer bloque ya no usa dict-style camelCase incorrecto (
stats['totalServidores']) sino atributos snake_case correctos (stats.total_servidores); ahora corre limpio al copia-pegar. - README "Uso rápido" unificado al patrón context manager
with DatosMexico() as client:consistente condocs/quickstart.md. - 45 bloques de código en
docs/auditados; 30 corregidos para sincronizar con los modelos Pydantic actuales del SDK (tutoriales cdmx, enigh, consar, comparativo; conceptos identidad-contable; tutorial enoe ya estaba sincronizado). - Convención de conteo de endpoints documentada explícitamente: endpoints HTTP (95/114 cubiertos = 83%) como cifra canónica comparable con APIs institucionales, métodos SDK (97 públicos) como aclaración pedagógica donde aporta valor.
- Workflow
tests.ymlahora usapip install --require-hashes -r requirements-dev.txtpara reproducibilidad universal en lugar depip install -e ".[dev]"sin lock. - Versiones de GitHub Actions uniformadas:
actions/upload-artifact@v7en los 5 workflows. - Casing canónico Datos-Mexico en 26 URLs sobre 17 archivos (la organización en GitHub es
Datos-Mexico, nodatos-mexico). docs/contributing.mdampliada de 36 a más de 300 líneas con guía completa de desarrollo (setup uv, tests unit + integration, ruff/mypy, cómo agregar un namespace, mkdocs serve, release process OIDC).docs/tutoriales/cdmx.mdgeneralizada la nota sobre sectores test residuales (la API expone sectores contotal_servidores=0cuya cantidad puede variar entre releases).- Cifras frías refrescadas contra snapshot vigente de la API (servidores CDMX en README y tutorial).
docs/conceptos/comparativoydocs/index.mdcon descripción precisa del alcance real de los 7 endpoints de cruce cross-dataset.- BibTeX del notebook Amafore completado con
version,month,publisher,license,notepara coincidir con la versión canónica.
Fixed
- README ejemplo "Uso rápido" que crasheaba con
TypeError: 'DashboardStats' object is not subscriptableal copia-pegar la primera línea de código en una terminal de usuario. - Promesas stale en README: eliminada mención "Próximamente: comparativo cross-dataset" cuando el módulo ya existe desde v0.1.0; agregado ENOE a la lista de walkthroughs.
- Conteo de notebooks: corregido de 5 a 6 (off-by-one introducido al agregar el notebook de ENOE).
- Heading: corregido
## Examplesa## Ejemplos(única sección en inglés en README en español). docs/api/directorio vacío eliminado del filesystem local.uv.lockahora committeado para reproducibilidad CI verificable.- Patrón
.envampliado a.env*en.gitignorepara cubrir variantes futuras.
Infrastructure
- 38 commits sobre v0.2.0 organizados en 5 fases de pulido (PR #6 y PR #7).
- Cobertura de tests: 99% (1964 sentencias, 29 sin cubrir).
- Suite: 234 passed, 27 skipped (gated por
DATOS_MEXICO_INTEGRATION_TESTS=1). mypy --strict,ruff: clean en todo el código fuente.
Notes for citation
CITATION.cff actualizada con version: 0.2.1 y date-released: 2026-05-13. Los BibTeX en README, docs y notebook reflejan los mismos campos. Use cffconvert -f bibtex -i CITATION.cff para generar la cita canónica, o copie directamente el bloque @software{datos_mexico_py, ...} provisto en cualquiera de las tres ubicaciones.
v0.2.0 — Módulo ENOE (mercado laboral mexicano)
datos-mexico v0.2.0
Released: 2026-05-11
Nuevo módulo ENOE — acceso a 101.5 millones de microdatos y 76 mil
indicadores agregados del mercado laboral mexicano (INEGI ENOE,
2005T1–2025T1, dominio 15 años o más).
Instalación
pip install datos-mexico
# extra opcional para microdatos_to_pandas() y los notebooks
pip install datos-mexico[examples]Nuevas capacidades — client.enoe
19 métodos nuevos en cuatro familias.
Catálogos y metadata (5)
health()— estado del dataset (último periodo, conteos, cobertura).metadata()— información completa de cobertura, tablas, etapas y caveats.indicadores()— los 13 indicadores agregados disponibles.entidades()— las 32 entidades federativas con clave INEGI.etapas()— las 3 etapas metodológicas (clasica,etoe_telefonica,enoe_n).
Indicadores agregados (5)
serie_nacional()— serie temporal nacional 2005T1–2025T1.snapshot_nacional()— los 13 indicadores nacionales en un periodo.serie_entidad()— serie temporal por entidad federativa.snapshot_entidad()— todas las entidades para un indicador en un periodo.ranking()— ranking de entidades por indicador y periodo.
Distribuciones (4)
distribucion_sectorial_snapshot()— composición por sector económico (12 sectores SCIAN).distribucion_sectorial_serie()— evolución temporal de un sector.distribucion_posicion_snapshot()— composición por posición en la ocupación (subordinados, empleadores, cuenta propia, no remunerados).distribucion_posicion_serie()— evolución temporal de una posición.
Microdatos (5)
microdatos_schema()— descripción de columnas por tabla.microdatos_count()— conteo exacto con filtros sin descargar filas.microdatos_page()— una página explícita con paginación.microdatos_iter()— iterador síncrono que pagina internamente.microdatos_to_pandas()— helper DataFrame (requierepandas).
Tablas disponibles: viv (vivienda), hog (hogar), sdem
(sociodemográfico), coe1 y coe2 (cuestionario de ocupación y empleo).
Modelos Pydantic (28 nuevos)
Tipos fuertes con caveats metodológicos integrados:
EnoeHealth,EnoeMetadata,EnoeTablaInfoCaveatMetodologico(slug, titulo, descripcion, periodo_aplicable, referencia)IndicadorRef,IndicadoresResponseEntidadRef,EntidadesResponseEtapaRef,EtapasResponseCoberturaTemporal,PuntoSerieSerieNacionalResponse,SerieEntidadResponseIndicadorSnapshotItem,SnapshotNacionalResponse,EntidadSnapshotRow,SnapshotEntidadResponseRankingEntidadRow,RankingResponseDistribucionSectorialRow,DistribucionSectorialSnapshot,DistribucionSectorialSerieDistribucionPosicionRow,DistribucionPosicionSnapshot,DistribucionPosicionSerieMicrodatoColumna,MicrodatosSchema,MicrodatosCountMicrodatosPagination,MicrodatosListResponse
Validación académica — reproducir el boletín INEGI 265/25
from datos_mexico import DatosMexico
with DatosMexico() as client:
r = client.enoe.ranking(
periodo="2025T1",
indicador="tasa_desocupacion",
limit=5,
)
for e in r.ranking:
print(f"{e.rank}. {e.entidad_nombre}: {e.valor:.2f}%")Salida — TOP 5 entidades por tasa de desocupación, 1T 2025:
| Rank | Clave INEGI | Entidad | Tasa |
|---|---|---|---|
| 1 | 27 | Tabasco | 4.97% |
| 2 | 05 | Coahuila de Zaragoza | 3.56% |
| 3 | 10 | Durango | 3.46% |
| 4 | 09 | Ciudad de México | 3.45% |
| 5 | 28 | Tamaulipas | 3.37% |
Cifras idénticas al boletín INEGI 265/25.
Caveats metodológicos integrados
El módulo inyecta automáticamente caveats tipados (CaveatMetodologico)
en cada response que toque una zona delicada:
- TIL1 definición operativa — series de informalidad laboral.
redefinicion_tcco_2020T1— la TCCO cambió su construcción en
2020T1; comparaciones cross-etapa requieren cautela.cambio_marco_2020T3— transición al marco muestral del CPV 2020;
subestimación de 6-7 % en el periodo 2020T3–2021T4.dominio_15_plus— el observatorio reconstruyó la etapa clásica
sobre el dominio uniforme 15+ (INEGI publicaba 14+ pre-2014T4).gap_documental_2020T2— trimestre sin microdatos por la
suspensión COVID; sustituido por ETOE telefónica.
Cada response relevante expone caveats: list[CaveatMetodologico].
Documentación
- Tutorial ENOE: https://docs.datosmexico.org/tutoriales/enoe/
- Reference API: https://docs.datosmexico.org/reference/enoe/
- FAQs ENOE: https://docs.datosmexico.org/faq/
- Notebook ejemplo:
examples/06_enoe_mercado_laboral.ipynb - Fuentes primarias: https://docs.datosmexico.org/sources/
Tests
33 tests passing (31 mock con respx + 2 integration tests que
reproducen el ranking INEGI 265/25 contra el API en vivo, gated por
DATOS_MEXICO_INTEGRATION_TESTS=1).
Smoke test end-to-end después de instalar:
pip install datos-mexico
python -c "
from datos_mexico import DatosMexico
with DatosMexico() as client:
r = client.enoe.ranking(
periodo='2025T1',
indicador='tasa_desocupacion',
limit=5,
)
claves = [e.entidad_clave for e in r.ranking]
assert claves == ['27', '05', '10', '09', '28'], claves
print('INEGI 265/25 reproducible vía pip install datos-mexico')
"Compatibilidad
- Python: 3.10, 3.11, 3.12, 3.13.
- Sin breaking changes desde v0.1.0; los namespaces existentes
(cdmx,consar,enigh,comparativo, …) no cambian de API. pandascomo extra opcional — solo lo necesita el helper
microdatos_to_pandas. Disponible en el extraexamples
(pip install datos-mexico[examples]).- Convención
entidad_clave— el módulo ENOE adopta el contrato
entidad_clavecanónico del observatorio (Sub-fase 3.10c del backend):
el SDK siempre envíaentidad_clave, nunca el alias deprecated
entidad.
Backend
- API REST pública: https://api.datos-itam.org (Cloudflare CDN).
- 17 endpoints ENOE en producción.
- Latencia warm: ~150–200 ms cache HIT, <2 s cold cross-region.
Cobertura del SDK
| Namespace | Endpoints | Estado |
|---|---|---|
cdmx, consar, enigh, comparativo, … (v0.1.0) |
78 | ✅ |
enoe (v0.2.0) |
17 | ✅ |
| Total cubierto | 95 / 114 | 100 % de las lecturas públicas |
Equipo
- David Fernando Ávila Díaz (ITAM, founder).
- Asesoría académica: Dr. Marco Augusto Vásquez Beltrán.
- Equipo de Datos México.
Próximos pasos
- Frontend
/enoeen datosmexico.org (Fase 4). - DOI Zenodo para citación académica.
- Submission al Premio Amafore-ITAM 2026.
PyPI: https://pypi.org/project/datos-mexico/0.2.0/
Docs: https://docs.datosmexico.org/
Issues: https://github.com/Datos-Mexico/datos-mexico-py/issues
v0.1.0 — Initial public release
Initial public release
First public release of the datos-mexico Python SDK.
Features
- 78 endpoints implemented covering 100% of the public read API of
https://api.datos-itam.org - 9 namespaces: cdmx (servidores públicos), consar (SAR/AFOREs),
enigh (hogares), comparativo (cross-dataset), personas, nombramientos,
demo, export, plus root client.health() - Pydantic v2 strict models with Decimal precision for monetary
fields (preserves accuracy for financial analysis) - HTTP client with retries (exponential backoff), in-memory TTL
cache, and structured exception hierarchy - 201 unit tests + 27 integration tests validating identidad
contable contra cifras INEGI oficiales - Type checked with mypy --strict in 28 source files
- 5 Jupyter example notebooks demonstrating real workflows
Installation
pip install datos-mexico==0.1.0Optional dependencies for running notebooks:
pip install datos-mexico[examples]Quickstart
from datos_mexico import DatosMexico
with DatosMexico() as client:
stats = client.cdmx.dashboard_stats()
print(f'{stats.total_servidores:,} servidores públicos en CDMX')Documentation
See https://github.com/datos-mexico/datos-mexico-py for full documentation
and example notebooks in the examples/
directory.
Citation
See CITATION.cff
for citation in BibTeX format.