Python de Cero a Experto / Ruta scripting
CLIs modernas con Typer
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—:
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:
$ 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.