Spaces:
Runtime error
Runtime error
import functools | |
import logging | |
import threading | |
import time | |
import warnings | |
def log_decorator(func): | |
def wrapper(*args, **kwargs): | |
logging.info(f'Entering {func.__name__}') | |
result = func(*args, **kwargs) | |
logging.info(f'Exiting {func.__name__}') | |
return result | |
return wrapper | |
def error_decorator(func): | |
def wrapper(*args, **kwargs): | |
try: | |
return func(*args, **kwargs) | |
except Exception as e: | |
logging.error(f'Error in {func.__name__}: {str(e)}') | |
raise | |
return wrapper | |
def timing_decorator(func): | |
def wrapper(*args, **kwargs): | |
start_time = time.time() | |
result = func(*args, **kwargs) | |
end_time = time.time() | |
logging.info(f'{func.__name__} executed in {end_time - start_time} seconds') | |
return result | |
return wrapper | |
def retry_decorator(max_retries=5): | |
def decorator(func): | |
def wrapper(*args, **kwargs): | |
for _ in range(max_retries): | |
try: | |
return func(*args, **kwargs) | |
except Exception as error: | |
logging.error(f" Error in {func.__name__}: {str(error)} Retrying ....") | |
return func(*args, **kwargs) | |
return wrapper | |
return decorator | |
def singleton_decorator(cls): | |
instances = {} | |
def wrapper(*args, **kwargs): | |
if cls not in instances: | |
instances[cls] = cls(*args, **kwargs) | |
return instances[cls] | |
return wrapper | |
def synchronized_decorator(func): | |
func.__lock__ = threading.Lock() | |
def wrapper(*args, **kwargs): | |
with func.__lock__: | |
return func(*args, **kwargs) | |
return wrapper | |
def deprecated_decorator(func): | |
def wrapper(*args, **kwargs): | |
warnings.warn(f"{func.__name__} is deprecated", category=DeprecationWarning) | |
return func(*args, **kwargs) | |
return wrapper | |
def validate_inputs_decorator(validator): | |
def decorator(func): | |
def wrapper(*args, **kwargs): | |
if not validator(*args, **kwargs): | |
raise ValueError("Invalid Inputs") | |
return func(*args, **kwargs) | |
return wrapper | |
return decorator | |