Automatizando Notificaciones de Escritorio en Python con auto-notifier
Automatizando Notificaciones de Escritorio en Python con auto-notifier
Cuando trabajas con dos monitores, es fácil iniciar un script largo en una terminal y luego cambiar tu atención a otra tarea. A mí me pasa seguido: lanzo un proceso en Python, me pongo a hacer otra cosa, y cuando regreso… ya había terminado (o fallado) hace rato.
auto-notifier fue creado para ese escenario. Envuelve tu función o bloque de código, detecta si todo terminó bien o con error, y envía una notificación nativa en el escritorio. Usa dos conceptos muy conocidos en Python — decoradores y context managers — sin requerir configuraciones adicionales.
[ Espacio reservado para imagen de la notificación ] Ejemplo: ventana emergente después de finalizar el script
🚀 Instalación
pip install auto-notifier
auto-notifier utiliza notify-py internamente para enviar notificaciones nativas (Windows, macOS, Linux).
🧭 Cómo Funciona
| Interfaz | Ideal Para |
|---|---|
@notify_when_done | Monitorear una función |
notify_on_complete() | Monitorear un bloque de código |
Ambos detectan:
- ✅ Finalización exitosa
- ❌ Excepciones (con alerta de error)
- ⏱️ Tiempo de ejecución registrado
Las excepciones no se ocultan — verás el traceback normalmente en la terminal.
🧩 Uso con Decorator
from auto_notifier import notify_when_done
import time
@notify_when_done(
title="Backup completado",
message="La copia de seguridad terminó exitosamente.",
error_title="Error en el backup"
)
def ejecutar_backup():
time.sleep(5) # simula trabajo
# raise Exception("Error de disco") # probar fallo
return "ok"
ejecutar_backup()
Qué ocurre:
- Éxito → Notificación “Backup completado”
- Error → Notificación “Error en el backup”, excepción relanzada
📎 Uso con Context Manager
from auto_notifier import notify_on_complete
import time
with notify_on_complete(title="Importación finalizada"):
time.sleep(3)
print("Importación completada")
Ideal para scripts o notebooks con bloques largos.
🎛️ Personalizando la Notificación
| Parámetro | Descripción |
|---|---|
title | Título en caso de éxito |
message | Mensaje en caso de éxito |
error_title | Título en caso de error |
error_message | Mensaje en caso de error |
icon_path | Ícono personalizado |
app_name | Nombre en el centro de notificaciones |
Ejemplo con ícono:
@notify_when_done(
title="Reporte generado",
message="Métricas mensuales listas.",
icon_path="icons/chart.png"
)
def generar_reporte():
...
🛠 Decorators y Context Managers
- Decorator: Envuelve la función, mide el tiempo, captura errores y envía la notificación
- Context Manager: Usa
__enter__/__exit__para asegurar la notificación incluso ante excepciones
No hay hilos, servicios ni configuración extra — solo flujo Python.
🔁 Ejemplo Completo (Estilo Pipeline)
from auto_notifier import notify_when_done, notify_on_complete
import pandas as pd
import time
@notify_when_done(title="Datos limpios", error_title="Error en limpieza")
def limpiar_datos(ruta):
df = pd.read_csv(ruta)
time.sleep(4)
return df.dropna()
with notify_on_complete(title="Pipeline ETL finalizado"):
limpio = limpiar_datos("raw.csv")
limpio.to_csv("cleaned.csv", index=False)
🧭 Cuándo Usarlo
- Scripts largos en terminal
- Procesamiento de datos / scraping
- Entrenamiento de modelos
- Backups o exportaciones
Pensado para uso local, con notificaciones del sistema.
📌 Resumen
auto-notifier agrega notificaciones a funciones o bloques de código usando decorators o context managers.
Te permite alejarte del terminal y aun así saber exactamente cuándo terminó — o falló — un proceso.
PyPI: https://pypi.org/project/auto-notifier/ GitHub: https://github.com/yalmeidarj/auto-notifier
Si ejecutas scripts y cambias de tarea, esta herramienta elimina el “¿ya habrá terminado?”