parent
641db4b375
commit
7cef70e8ab
@ -0,0 +1,78 @@
|
|||||||
|
import time
|
||||||
|
import logging
|
||||||
|
import threading
|
||||||
|
import functools
|
||||||
|
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):
|
||||||
|
@functools.wraps(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):
|
||||||
|
@functools.wraps(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):
|
||||||
|
@functools.wraps(func)
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
if not validator(*args, **kwargs):
|
||||||
|
raise ValueError("Invalid Inputs")
|
||||||
|
return func(*args, **kwargs)
|
||||||
|
return wrapper
|
||||||
|
return decorator
|
||||||
|
|
Loading…
Reference in new issue