Configuración de pre-commit con Ruff y MyPy para validar código

Clase 6 de 17Curso de Python Avanzado para Arquitectura de Proyectos y PyPI

Resumen

Configura pre-commit para ejecutar validaciones automáticas antes de cada commit y evita que problemas de calidad lleguen a GitHub. Con Ruff como linter y formatter, más MyPy para tipos y reglas de seguridad de Bandit, tu código en Python cumple estándares desde el primer intento.

¿Qué es pre-commit y cómo garantiza calidad en cada commit?

Pre-commit es un framework que simplifica la configuración de hooks que se ejecutan automáticamente cada vez que haces un commit. Al instalarlo y crear el archivo de configuración pre-commit.config.yml, puedes activar reglas como corrección de fin de archivo, eliminación de espacios en blanco y validación de YAML. Al correr pre-commit install, el hook se integra en la carpeta .git para que todo commit pase por estas comprobaciones.

¿Qué reglas básicas conviene activar?

  • end-of-file-fixer: asegura una línea vacía al final del archivo.
  • trailing-whitespace: elimina espacios en blanco innecesarios.
  • check-yaml: valida la sintaxis de archivos YAML.

¿Cómo instalar y configurar pre-commit con Ruff y MyPy?

Primero instala pre-commit como dependencia de desarrollo y valida que responde en la terminal. Si avisa que falta configuración, crea pre-commit.config.yml y añade tus reglas. Luego ejecuta pre-commit install: se activará el hook local.

  • Herramientas clave: Ruff como linter y formatter. MyPy como analizador estático de tipos.
  • Archivo de proyecto: pyproject.toml con la configuración de Ruff y reglas como Bandit.
  • Habilidad práctica: interpretar mensajes de error y corregirlos antes del commit.
# Instalar el hook en el repositorio pre-commit install # Flujo de trabajo básico git status git add . git commit -m "mensaje"

Un ejemplo minimal de estructura para pre-commit.config.yml con las reglas mencionadas:

repos: - repo: ... rev: ... hooks: - id: end-of-file-fixer - id: trailing-whitespace - id: check-yaml - repo: ... # Integración de Ruff (Astral) rev: ... hooks: - id: ruff - id: ruff-format - repo: ... # mirrors-mypy rev: "1.8.0" hooks: - id: mypy

¿Cómo probar la configuración con Ruff?

  • Genera un cambio que viole una regla: por ejemplo, una línea muy larga.
  • Ejecuta git add y git commit con un mensaje como “intento de commit malo”.
  • El primer commit puede instalar dependencias de hooks automáticamente.
  • Verás que Ruff bloquea el commit con el detalle del error: la línea supera el límite.

¿Cómo integrar MyPy en los hooks?

  • Añade mirrors-mypy con un ref que coincida con tu versión, por ejemplo: "1.8.0".
  • Guarda cambios y recuerda: si modificas pre-commit.config.yml, debes hacer git add de ese archivo para que el hook lo tenga en cuenta.
  • Reintenta el commit y confirma que MyPy ejecute sus comprobaciones.

¿Cómo validar, evitar errores y aplicar seguridad con Bandit?

Puedes necesitar terminar un commit urgente y omitir las verificaciones de estilo. En ese caso, usa la opción --no-verify al final del comando de commit. Úsala con responsabilidad.

git commit -m "mensaje urgente" --no-verify

Para seguridad, activa reglas de Bandit desde la configuración de Ruff en tu pyproject.toml. Un caso típico es la regla S307, que alerta sobre el uso inseguro de eval.

# Ejemplo inseguro: Bandit S307 user_input = input("Ingresa una expresión:") resultado = eval(user_input) # Inseguro: ejecución arbitraria de código
  • Al intentar el commit, pre-commit mostrará: “función insegura, considera cambiarla”.
  • Elimina el uso de eval y vuelve a ejecutar git add y git commit.
  • El commit pasará cuando el código cumpla las reglas activadas.

¿Qué buenas prácticas mejoran tu flujo?

  • Configúralo desde el inicio del proyecto para estándares consistentes.
  • Incluye solo herramientas esenciales para no ralentizar los commits.
  • Combínalo con continuous integration y continuous deployment para doble validación: local y remota.

¿Te funcionó esta guía y activaste tus hooks con Ruff y MyPy? Comparte en comentarios qué reglas usas y qué errores te ayudan a prevenir.