Un cheatsheet automático para tu CLI Typer

Typer es gran framework de CLIs del mismo autor que creó FastAPI. Permite crear interfaces de línea de comandos robustas e intuitivas basándose en anotaciones sobre los argumentos de funciones. Sin hacer mucho esfuerzo te ofrece autocompletado y ayuda en línea de comandos, que de paso se ve muy bonita al estar basada en rich.

También permite facilmente registrar grupos de comandos y subcomandos, lo que facilita la organización y mantenimiento de aplicaciones grandes. Pero, ¿qué pasa cuando tu aplicación crece, con múltiples subcomandos, grupos y opciones anidadas?

Para los usuarios (¡o incluso para vos mismo después de un tiempo!), puede ser un desafío recordar todos los comandos disponibles, sus funciones y cómo interactúan. La ayuda integrada y la documentación son clave, pero ¿no sería fantástico tener un "mapa" en vivo de tu aplicación, accesible directamente desde la terminal?

¡Acá es donde entra typer-cheatsheet-command!

typer-cheatsheet-command es una pequeña biblioteca que escribí que te permite agregar un subcomando cheatsheet a tu programa basado en Typer. Este comando instrospecciona la aplicación y genera una representación en formato de árbol de todos tus comandos y subcomandos.

Por ejemplo, una aplicación Typer llamada typer-cheatsheet-demo tiene algunos comandos y subcomandos:

import typer

app = typer.Typer(name="demo", help="demo")

users_app = typer.Typer(help="Manage users in the system.")

@users_app.command("add")
def add_user(username: str):
    """Adds a new user."""
    print(f"Adding user: {username}")

@users_app.command("delete")
def delete_user(username: str):
    """Deletes an existing user."""
    print(f"Deleting user: {username}")

app.add_typer(users_app, name="users")

@app.command()
def generate_report(month: str):
    """
    Generates a monthly report.
    """
    print(f"Generating report for {month}...")

@app.command()
def configure():
    """
    Configure application settings.
    """
    print("Configuring application...")

# Register the cheatsheet command
register_cheatsheet_command(app)

Gracias a la última linea, al ejecutar tu aplicación, el comando cheatsheet estará disponible:

typer-cheatsheet-demo cheatsheet

Verás una salida similar a esta:

Cheatsheet

¿Tenés comandos ocultos que quieres ver? Simplemente agregá la opción --show-all:

Por defecto, el comando se registra como cheatsheet. Si querés usar un nombre diferente para el subcomando, podés definir explícitamente:

register_cheatsheet_command(app, command_name="cheat")

Cómo funciona

Una función de registro recibe la app y el nombre del comando, y luego registra el comando provisto en la aplicación. La función instrospecciona los comandos y subcomandos registrados en la aplicación y genera una representación en formato de árbol, usando el widget Tree de rich.

Comentarios

Comments powered by Disqus