typestar

todo_cli.py en Python

Una lista de pendientes CLI completa que persiste en JSON.

"""Una mini lista de pendientes que persiste en un archivo JSON."""
import argparse
import json
from pathlib import Path

ARCHIVO_PENDIENTES = Path("todos.json")


def cargar_pendientes():
    if ARCHIVO_PENDIENTES.exists():
        return json.loads(ARCHIVO_PENDIENTES.read_text())
    return []


def guardar_pendientes(pendientes):
    ARCHIVO_PENDIENTES.write_text(json.dumps(pendientes, indent=2))


def principal():
    parser = argparse.ArgumentParser(description="lista mínima de pendientes")
    sub = parser.add_subparsers(dest="command", required=True)
    agregar = sub.add_parser("agregar")
    agregar.add_argument("text")
    hecho = sub.add_parser("hecho")
    hecho.add_argument("number", type=int)
    sub.add_parser("lista")
    args = parser.parse_args()

    pendientes = cargar_pendientes()
    if args.command == "agregar":
        pendientes.append({"texto": args.text, "hecho": False})
        guardar_pendientes(pendientes)
        print(f"agregado: {args.text}")
    elif args.command == "hecho":
        pendientes[args.number - 1]["hecho"] = True
        guardar_pendientes(pendientes)
        print(f"completado #{args.number}")
    else:
        for i, pendiente in enumerate(pendientes, start=1):
            marca = "x" if pendiente["hecho"] else " "
            print(f"[{marca}] {i}. {pendiente['texto']}")


if __name__ == "__main__":
    principal()

Cómo funciona

  1. Los subcomandos de argparse le dan los verbos add, done y list.
  2. El estado va y vuelve por un archivo JSON con pathlib.
  3. Cada comando edita la lista y la vuelve a guardar.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
45
Caracteres a escribir
1234
Tokens
306
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 175 segundos.

Escribe este fragmento

Paso 3 de 5 en Bis; paso 70 de 72 en Fundamentos del lenguaje.

← Anterior Siguiente →