Skip to content

Commit c5c1862

Browse files
committed
#25-python
1 parent 4324abd commit c5c1862

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
2+
print("\n\n=======================================EJERCICIO=======================================\n\n")
3+
4+
"""
5+
* EJERCICIO:
6+
* Explora el concepto de "logging" en tu lenguaje. Configuralo y muestra
7+
* un ejemplo con cada nivel de "severidad" disponible.
8+
9+
* CRITICAL: El nivel mas alto de registro, se utiliza para mensajes de error cri­ticos que pueden hacer que el programa se detenga.
10+
* ERROR: Se utiliza para mensajes de error que pueden ser recuperables, pero que indican un problema importante en el programa.
11+
* WARNING: Se utiliza para mensajes de advertencia que no son cri­ticos, pero que indican un comportamiento inesperado o problemático.
12+
* INFO: Se utiliza para mensajes informativos que indican el estado del programa o el progreso de la ejecución.
13+
* DEBUG: Se utiliza para mensajes de depuración que proporcionan información detallada sobre el funcionamiento interno del programa.
14+
"""
15+
16+
# Importamos el modulo
17+
import logging
18+
19+
# Indicamos el nivel de severidad a partir del cual queremos que nos muestre el mensaje
20+
# En este caso desde el mas bajo. Si no pusieramos nada mostraría solo los de "Error" y "Critical"
21+
# Tambien se le puede configurar como queremos que salga el mensaje. Vamos a poner que salga con la fecha, nivel de severidad y mensaje
22+
logging.basicConfig(level=logging.DEBUG,
23+
format='%(asctime)s - %(levelname)s - %(message)s')
24+
25+
26+
# Registro de un mensaje de depuracion
27+
logging.debug("[+] Entramos a la funcion\n")
28+
29+
# Registro de un mensaje de informacion
30+
logging.info("[+] La conexion con el servidor fue exitosa\n")
31+
32+
# Registro de un mensaje de advertencia
33+
logging.warning("[!] Queda poco espacio en disco\n")
34+
35+
# Registro de un mensaje de error
36+
logging.error("[!] Bloque de sangria previsto\n")
37+
38+
# Registro de un mensaje de depuración
39+
logging.critical("[!] Hay un error critico. Saliendo de la aplicacion ....\n")
40+
41+
42+
print("\n\n=======================================DIFICULTAD EXTRA=======================================\n\n")
43+
44+
45+
"""
46+
* DIFICULTAD EXTRA (opcional):
47+
* Crea un programa ficticio de gestion de tareas que permita añadir, eliminar
48+
* y listar dichas tareas.
49+
* - Añadir: recibe nombre y descripcion.
50+
* - Eliminar: por nombre de la tarea.
51+
* Implementa diferentes mensajes de log que muestren informacion segun la
52+
* tarea ejecutada (a tu eleccion).
53+
* Utiliza el log para visualizar el tiempo de ejecucion de cada tarea.
54+
"""
55+
import time
56+
57+
#logging.basicConfig(level=logging.DEBUG,
58+
# format='%(asctime)s - %(levelname)s - %(message)s')
59+
60+
def time_spent(function):
61+
def time_used(*args, **kwargs):
62+
init = time.time()
63+
result = function(*args, **kwargs)
64+
elapsed_time = time.time() - init
65+
logging.info(f"[+] El tiempo empleado en {function.__name__} es {elapsed_time:.4f} segundos")
66+
return result
67+
return time_used
68+
69+
class Task:
70+
def __init__(self, name, description):
71+
self.name = name
72+
self.description = description
73+
74+
75+
class Task_Manager:
76+
def __init__(self):
77+
self.tasks = []
78+
79+
@time_spent
80+
def add_task(self, task):
81+
logging.debug("[*] Comienza la funcion para 'añadir tareas'")
82+
time.sleep(1)
83+
if any(t['name'] == task.name for t in self.tasks):
84+
logging.warning("[!] La tarea ya esta en la lista")
85+
else:
86+
self.tasks.append({
87+
'name': task.name,
88+
'description': task.description
89+
})
90+
time.sleep(1)
91+
logging.info("[+] Se agrega nueva tarea")
92+
logging.debug("[*] Finaliza la funcion 'añadir tareas'")
93+
94+
95+
@time_spent
96+
def del_task(self, task_name):
97+
logging.debug("[*] Comienza la funcion para 'borrar tareas'")
98+
time.sleep(1)
99+
self.tasks = [task for task in self.tasks if task['name'] != task_name]
100+
logging.info(f"[-] Se elimino la tarea: {task_name}")
101+
logging.debug("[*] Finaliza la funcion 'borrar tareas'")
102+
103+
@time_spent
104+
def list_tasks(self):
105+
logging.debug("[*] Comienza la funcion para 'listar tareas'")
106+
time.sleep(1)
107+
for task in self.tasks:
108+
logging.info(f"[+] Tarea: {task['name']} - Descripcion: {task['description']}")
109+
logging.debug("[*] Finaliza la funcion 'listar tareas'")
110+
111+
112+
113+
if __name__ == "__main__":
114+
task_manager = Task_Manager()
115+
116+
task1 = Task("Tarea 1", "Descripcion de la tarea 1")
117+
task2 = Task("Tarea 2", "Descripcion de la tarea 2")
118+
task3 = Task("Tarea 3", "Descripcion de la tarea 3")
119+
120+
121+
task_manager.add_task(task1)
122+
task_manager.add_task(task2)
123+
task_manager.add_task(task3)
124+
task_manager.add_task(task1)
125+
126+
127+
task_manager.list_tasks()
128+
task_manager.del_task("Tarea 2")
129+
task_manager.list_tasks()
130+
131+
132+
133+

0 commit comments

Comments
 (0)