Cómo actualizar clientes en CLI con Click

Clase 44 de 49Curso Práctico de Python: Creación de un CRUD

Resumen

Optimiza tu CLI en Python con un flujo de actualización claro, seguro y amigable. Aprenderás a integrar Click, un ClientService, una búsqueda por UID con list comprehension y un flow de prompts con valores por defecto para editar campos sin perder datos.

¿Cómo actualizar clientes con Click y ClientService?

Para iniciar el flujo de actualización, se crea una instancia de ClientService con el nombre de la tabla de clientes y se lista la información disponible. Luego, se localiza el registro por UID usando un list comprehension. Si no se encuentra, se notifica con click.echo. Si existe, se dispara el flow de actualización y se guarda el cambio con el servicio.

¿Cómo obtener la referencia a ClientService?

  • Instanciar el servicio con el nombre de la tabla de clientes.
  • Mantener una sola responsabilidad: el servicio maneja lectura y actualización.
client_service = ClientService('client_table')
client_list = client_service.list_clients()

¿Cómo localizar el cliente por UID con list comprehension?

  • Filtrar por coincidencia exacta de UID.
  • Asegurar match único: se valida por identificador.
client = [c for c in client_list if c['uid'] == client_uid]

if not client:
    click.echo('Client not found')
    return

cliente_actualizado = update_client_flow(client[0])
client_service.update_client(cliente_actualizado)
click.echo('Client updated')

¿Qué mensajes y flujos se manejan con click.echo?

  • Cuando no hay coincidencia: client not found.
  • Cuando se actualiza correctamente: client updated.
  • Mensajes claros y breves para guiar la interacción.

¿Qué es update_client_flow y cómo usar click.prompt?

El flow de actualización guía al usuario campo por campo. Se muestra una instrucción inicial: Leave empty if you don't want to modify the value. Déjalo vacío si no quieres modificar el valor. Cada prompt usa el valor actual como default, de modo que si se presiona Enter sin escribir nada, el dato no cambia.

def update_client_flow(client):
    click.echo('Leave empty if you don\'t want to modify the value. ' \
               'Déjalo vacío si no quieres modificar el valor.')

    name = click.prompt('New name', type=str, default=client['name'])
    company = click.prompt('New company', type=str, default=client['company'])
    email = click.prompt('New email', type=str, default=client['email'])
    position = click.prompt('New position', type=str, default=client['position'])

    client['name'] = name
    client['company'] = company
    client['email'] = email
    client['position'] = position
    return client

¿Cómo mantener valores con default en click.prompt?

  • Usar el dato actual del cliente como default.
  • Presionar Enter conserva el valor sin cambios.
  • Minimiza errores y acelera la edición.

¿Qué campos se actualizan en el cliente?

  • Nombre del cliente: name.
  • Compañía: company.
  • Correo: email.
  • Puesto: position.

¿Cómo se prueba el comando pv clients update?

Primero, lista los registros para identificar el UID. Luego, ejecuta el comando de actualización y responde a los prompts. Ejemplo: renombrar a Ricardo, cambiar la compañía a Tom Inc, actualizar el correo y mantener el puesto como CEO.

pv clients list
pv clients update <ID>
# Prompts de ejemplo:
# New name: Ricardo
# New company: Tom Inc
# New email: ricardo@ricardo
# New position: CEO

Claves prácticas: - Búsqueda por UID con list comprehension para precisión. - Mensajes de estado con click.echo para una UX clara. - Prompts con default mediante click.prompt para ediciones seguras.

Como siguiente paso, implementa la funcionalidad de delete como reto personal. ¿Cómo diseñarías el flujo y las confirmaciones? Comparte tu solución y aprendizajes en los comentarios.