Skip to content

Commit 9b831a0

Browse files
authored
Merge pull request mouredev#4699 from avcenal/main
#25 - Python
2 parents 76eee64 + cfc66b0 commit 9b831a0

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

Roadmap/25 - LOGS/python/avcenal.py

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
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

Comments
 (0)