CodeForge

Python de Cero a Experto / Ruta scripting

CLIs modernas con Typer

Teoría20 min20 XP

Un buen script merece una buena interfaz. Ya viste argparse para crear CLIs; TYPER es su evolución moderna: defines comandos como FUNCIONES normales con type hints, y Typer genera la CLI, la validación, la ayuda con colores y el autocompletado —automáticamente—. Es a las CLIs lo que FastAPI es a las APIs: máxima potencia con mínimo código. Hoy le das a tus automatizaciones el acabado profesional que las hace un placer de usar.

El panel de control automático

Comandos como funciones

Como Typer crea herramientas de terminal, esta lección va con bloques —pruébalo tras pip install typer—:

bolsillo.py
import typer

app = typer.Typer()

# cada función decorada con @app.command() es un COMANDO de la CLI.
# los type hints definen los tipos y la validación automáticamente.
@app.command()
def agregar(nombre: str, valor: int, categoria: str = "otros"):
  """Registra un gasto nuevo."""
  total = valor * 1.19
  typer.echo(f"Agregado: {nombre} = {valor:,} ({categoria}), con IVA {total:,.0f}")

@app.command()
def reporte(archivo: str, total: bool = False):
  """Genera un reporte desde un archivo de gastos."""
  if total:
      typer.echo("Mostrando solo el total...")
  else:
      typer.echo(f"Reporte completo de {archivo}")

if __name__ == "__main__":
  app()

Se usa desde la terminal, y cada función se vuelve un subcomando:

terminal

$ python bolsillo.py agregar Café 4000 --categoria comida

Agregado: Café = 4,000 (comida), con IVA 4,760

$ python bolsillo.py reporte gastos.json --total

Mostrando solo el total...

$ python bolsillo.py --help

Commands: agregar reporte

Cada función con @app.command() se convierte en un SUBCOMANDO (agregar, reporte) —como git commit, git push—. Lo elegante: los type hints hacen TODO el trabajo. valor: int valida que sea un número (y da error claro si no); categoria: str = "otros" crea una opción --categoria con valor por defecto; total: bool = False crea una bandera --total. El docstring de la función se vuelve su texto de ayuda. typer.echo imprime (con soporte de colores). Comparado con argparse, escribes MUCHO menos: la firma de la función ES la definición de la CLI.

¿Cómo define Typer los comandos y argumentos de una CLI, y qué ventaja tiene sobre argparse?

Mini-reto

Diseña (en tu Python instalado) una CLI con Typer para Mi Bolsillo: 1) un comando agregar(nombre: str, valor: int, categoria: str = "otros") que imprima el gasto; 2) un comando listar(archivo: str, categoria: str = None) que filtre por categoría si se da; 3) una bandera --iva en agregar (parámetro iva: bool = False) que aplique el impuesto. Escribe cómo invocarías cada comando desde la terminal, y qué mostraría --help.

Qué sigue

¡Módulo 7 casi cerrado! Dominas la automatización —archivos, web, Excel, CLIs—. Ya conviertes tareas tediosas en scripts útiles. El reto del módulo junta todo en un script de automatización completo. Después, el módulo 8 abre la ruta de BACKEND: crear APIs web con FastAPI, uno de los usos más demandados de Python.