Guía de Contribución para legismex 🇲🇽
¡Gracias por tu interés en contribuir a legismex! Este proyecto tiene como objetivo abstraer y estandarizar el acceso a la información legislativa y oficial de los 32 estados de la República Mexicana, el Senado, la Cámara de Diputados y el DOF.
Para mantener la calidad, consistencia y facilidad de uso de la biblioteca, te pedimos que sigas estas directrices al agregar un nuevo scraper para un estado o modificar uno existente.
Estructura de Directorios
Cada entidad o fuente de información debe tener su propio directorio dentro de src/legismex/. Si el estado tiene Congreso y Periódico Oficial (PO), se deben crear dos carpetas independientes.
Ejemplo para Nuevo León:
* src/legismex/nuevoleon/ (Para el Congreso o Gaceta Parlamentaria)
* src/legismex/nuevoleon_po/ (Para el Periódico Oficial)
Cada directorio debe contener al menos los siguientes tres archivos:
1. __init__.py: Importa las clases públicas (cliente y modelos).
2. client.py: Contiene la lógica del Web Scraper / API Client.
3. models.py: Contiene los modelos de datos usando Pydantic.
1. Modelado de Datos (models.py)
Todos los datos extraídos deben ser transformados en objetos estructurados utilizando pydantic.BaseModel.
Reglas:
* Los nombres de las clases deben seguir el formato [Estado][Módulo][Clase]. Ej: NuevoLeonIniciativa, NuevoLeonPoEdicion.
* Usa typing.Optional para campos que puedan no estar presentes.
* Usa alias (Field(alias="...")) si consumes una API JSON, para que el modelo mapee correctamente y mantengas atributos en snake_case en Python.
2. El Cliente Web (client.py)
La clase cliente debe llamarse [Estado]Client o [Estado]PoClient (ej. NuevoLeonClient, NuevoLeonPoClient).
Uso de httpx:
* Usa httpx.Client() en lugar de requests para un mejor rendimiento y soporte asíncrono.
* SSL Issues: Muchos portales gubernamentales tienen certificados vencidos. Configura el cliente con verify=False si es estrictamente necesario.
* Tiempos de espera: Define un timeout razonable (por defecto 30.0 segundos).
* Paridad Síncrona / Asíncrona: Cuando sea aplicable, provee versiones síncronas (obtener_gacetas) y asíncronas (a_obtener_gacetas) utilizando httpx.AsyncClient.
Firma de Métodos:
* Asegúrate de agregar docstrings y que los métodos devuelvan listas de los modelos de Pydantic definidos. Evita devolver diccionarios crudos o listas genéricas.
3. Scripts de Verificación (tests/)
Es obligatorio crear un script de validación (auditoría) visual para probar tu código, llamado verify_[estado]_[modulo].py dentro de la carpeta tests/.
Ejemplo: tests/verify_nuevoleon_congreso.py.
Este script debe instanciar tu cliente, realizar una consulta básica (como obtener el último mes o la primera página), e imprimir de forma ordenada los primeros 3 resultados en la terminal para demostrar que el parser y los enlaces a los PDFs funcionan correctamente.
Flujo de Trabajo (Pull Request)
- Crea una rama para tu estado o característica (ej.
feat/estado-mexico). - Implementa los modelos, el cliente y el
__init__.py. - Crea y verifica con el script en
tests/. - Añade una sección corta al final del
TUTORIAL.mdcon un ejemplo de uso (opcional pero muy recomendado). - Haz commit y empuja tus cambios.
- Abre el PR.
¡Agradecemos mucho tu ayuda para democratizar el acceso a las leyes de México!