Problemas de un desarrollador Web

Challenge_Task Fri Oct 27 2023 00:00:00 GMT+0000 (Coordinated Universal Time)

🏆 RETO: El Clásico Hola Mundo

🎯 Desafío #4: El Decorador de Auditoría (Python)

En un entorno profesional, no basta con que una función haga su trabajo; necesitamos rastrear quién la usa y cuánto tarda sin modificar el código original de la función.

Misión_Briefing [Avanzado]

"Crea un 'Decorador' en Python llamado @auditoria que, al aplicarse a cualquier función, imprima en consola el tiempo exacto que tardó en ejecutarse y los argumentos que recibió."

Ver explicación y código 🛠️ (¡No hagas spoiler!)

🏗️ Paso 1: Análisis

Los decoradores son funciones que envuelven a otras funciones. Necesitamos usar *args y **kwargs para capturar cualquier tipo de entrada y el módulo time para la medición. ⚙️ Paso 2: Implementación

La función interna (wrapper) debe ejecutar la función original, pero guardando el timestamp antes y después de la ejecución. 🚀 Paso 3: Optimización

Usaremos functools.wraps para que la función decorada no pierda sus metadatos (como su nombre o documentación original). 💻 Código de la Solución


import time
from functools import wraps

def auditoria(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        inicio = time.time()
        resultado = func(*args, **kwargs)
        fin = time.time()
        print(f"[AUDITORÍA] Ejecutada: {func.__name__}")
        print(f"[AUDITORÍA] Argumentos: {args} {kwargs}")
        print(f"[AUDITORÍA] Tiempo: {fin - inicio:.4f} seg")
        return resultado
    return wrapper

@auditoria
def hackear_servidor(ip):
    time.sleep(1) # Simula proceso pesado
    return f"Acceso total a {ip}"

hackear_servidor("192.168.1.1")