f5-common-python
f5-common-python copied to clipboard
logging/messaging system for SDK
opening this issue to create messaging/logging system for SDK,
some experiments:
import logging
import warnings
from functools import wraps
logging.captureWarnings(True)
logging.basicConfig(level=logging.WARN,
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename='example.log',
filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.WARN)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)
def deprecate(func):
@wraps(func)
def wrapper(*args, **kwargs):
warnings.warn("This method {0} is deprecated".format(func.__name__))
return func(*args, **kwargs)
return wrapper
def heads_up(func):
@wraps(func)
def wrapper(*args, **kwargs):
warnings.warn("This method {0} will go away soon".format(func.__name__))
return func(*args, **kwargs)
return wrapper
class Test(object):
def __init__(self):
self.stuff = ['some', 0, 'data', 1]
@deprecate
def old_method(self):
return sorted(self.stuff)
@heads_up
def soon_obsolete(self):
return sorted(self.stuff)
def right_way(self):
return sorted(self.stuff)
def pop_args(param):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
if param in kwargs:
kwargs.pop(param)
warnings.warn("This parameter {0} is deprecated and therefore was removed".format(param))
return func(*args, **kwargs)
return wrapper
return decorator
>>> a = Test()
>>> a.old_args('first_arg', old='somevalue', new='somevalue2')
py.warnings : WARNING <string>:44: UserWarning: This parameter old is deprecated and therefore was removed
You have sorted list and defined the following args ('first_arg',) and kwargs {'new': 'somevalue2'}