f5-common-python icon indicating copy to clipboard operation
f5-common-python copied to clipboard

logging/messaging system for SDK

Open wojtek0806 opened this issue 8 years ago • 2 comments

opening this issue to create messaging/logging system for SDK,

wojtek0806 avatar Oct 13 '17 10:10 wojtek0806

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)

wojtek0806 avatar Oct 13 '17 13:10 wojtek0806

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'}

wojtek0806 avatar Oct 13 '17 13:10 wojtek0806