|
| 1 | +import logging |
| 2 | + |
| 3 | +""" |
| 4 | + * EJERCICIO: |
| 5 | + * Explora el concepto de "logging" en tu lenguaje. Configúralo y muestra |
| 6 | + * un ejemplo con cada nivel de "severidad" disponible. |
| 7 | +""" |
| 8 | +logging.basicConfig(level=logging.DEBUG, |
| 9 | + format="%(asctime)s -- %(levelname)s: %(message)s", |
| 10 | + datefmt="%d/%m/%Y - %H:%M:%S", |
| 11 | + handlers=[logging.StreamHandler()]) |
| 12 | + |
| 13 | +logging.debug("Info para hacer debugging") |
| 14 | +logging.info("Todo funciona correctamente") |
| 15 | +logging.warning("Ha pasado algo inesperado o está a punto de ocurrir algo") |
| 16 | +logging.error("Error, no se ha podido realizar la acción") |
| 17 | +logging.critical("Error grave, posiblemente el programa no pueda continuar") |
| 18 | + |
| 19 | +""" |
| 20 | + * DIFICULTAD EXTRA (opcional): |
| 21 | + * Crea un programa ficticio de gestión de tareas que permita añadir, eliminar |
| 22 | + * y listar dichas tareas. |
| 23 | + * - Añadir: recibe nombre y descripción. |
| 24 | + * - Eliminar: por nombre de la tarea. |
| 25 | + * Implementa diferentes mensajes de log que muestren información según la |
| 26 | + * tarea ejecutada (a tu elección). |
| 27 | + * Utiliza el log para visualizar el tiempo de ejecución de cada tarea. DECORADORES?? |
| 28 | +""" |
| 29 | +from time import sleep |
| 30 | +import time |
| 31 | + |
| 32 | +def task_number_decorator(function): |
| 33 | + def original_function(tasks:list): |
| 34 | + result = function(tasks) |
| 35 | + logging.debug(f"Número de tareas: {len(tasks)}") |
| 36 | + return result |
| 37 | + return original_function |
| 38 | + |
| 39 | +def time_decorator(function): |
| 40 | + def original_function(*args): |
| 41 | + start_time = time.time() |
| 42 | + result = function(*args) |
| 43 | + end_time = time.time() |
| 44 | + print(f"La ejecución ha tardado {end_time - start_time:.6} segundos") |
| 45 | + print("\n") |
| 46 | + sleep(1) |
| 47 | + return result |
| 48 | + return original_function |
| 49 | + |
| 50 | +@time_decorator |
| 51 | +@task_number_decorator |
| 52 | +def add_task(tasks:list): |
| 53 | + task:dict = {"name":"","description":""} |
| 54 | + task["name"] = input("Dime el nombre para esta tarea: ") |
| 55 | + for element in tasks: #busco si la tarea ya existe en el sistema |
| 56 | + if element["name"] == task["name"]: |
| 57 | + logging.warning("La tarea ya existe en el sistema")#si existe lanzo un logging.error |
| 58 | + break |
| 59 | + else: #si no existe añado la descripción y continúa la ejecución |
| 60 | + task["description"] = input("Y ahora la descripción: ") |
| 61 | + tasks.append(task) |
| 62 | + logging.info(f"Tarea {task["name"]} guardada en el sistema.") |
| 63 | + return tasks |
| 64 | + |
| 65 | +@time_decorator |
| 66 | +@task_number_decorator |
| 67 | +def erase_task(tasks:list): |
| 68 | + if len(tasks) == 0: |
| 69 | + logging.warning(f"No hay tareas registradas en el sistema.") |
| 70 | + else: |
| 71 | + name:str = input("Dime el nombre de la tarea que quieres borrar: ") |
| 72 | + for element in tasks: |
| 73 | + if element["name"] == name: |
| 74 | + tasks.remove(element) |
| 75 | + logging.error(f"-- La tarea {name} ha sido borrada del sistema.") |
| 76 | + break |
| 77 | + else: |
| 78 | + logging.error(f"La tarea {name} no existe en el sistema.") |
| 79 | + return tasks |
| 80 | + |
| 81 | +@time_decorator |
| 82 | +def list_tasks(tasks): |
| 83 | + if len(tasks) == 0: |
| 84 | + logging.warning("No hay tareas registradas en el sistema") |
| 85 | + else: |
| 86 | + print("Estas son las tareas que hay en el sistema:") |
| 87 | + for element in tasks: |
| 88 | + print(f" - Nombre: {element["name"]}\n - Descripción: {element["description"]}\n") |
| 89 | + |
| 90 | + |
| 91 | +print("\n\nTe doy la bienvenida al progranma de gestión de tareas") |
| 92 | +tasks = list() #uso una lista aunque lo suyo sería usar un archivo externo para el log |
| 93 | +#esta lista va a contener diccionarios con los elementos name y description. |
| 94 | +while True: |
| 95 | + option = input("Por favor elije una de las opciones:\n - Añadir tarea(A)\n - Listar tareas(L)\n - Eliminar tarea(E)\n - Salir(S)\nTu opción --->").upper() |
| 96 | + if option == "A": |
| 97 | + add_task(tasks) |
| 98 | + elif option == "E": |
| 99 | + erase_task(tasks) |
| 100 | + elif option == "L": |
| 101 | + list_tasks(tasks) |
| 102 | + elif option == "S": |
| 103 | + print("Gracias por usar el sistema. Hasta pronto.") |
| 104 | + sleep(1) |
| 105 | + break |
| 106 | + else: |
| 107 | + print("La opción no es correcta\n") |
| 108 | + sleep(1) |
0 commit comments