# Add Function Example with Logging Debugger
# Python 3 Reflexive Metaprogramming
# H. Conrad Cunningham

# Developed for CSci 658, Software Language Engineering, Spring 2018

#234567890123456789012345678901234567890123456789012345678901234567890

# 2018-03-24: (V1) debug decorator adapted from Beazley's 2013
#             Metaprogramming tutorial
# 2018-04-03: (V1a) Update comments

from functools import wraps
import logging  # (1) logging module

def debug(func):
    # (2) get the Logger for func's module
    log = logging.getLogger(func.__module__)
    msg = func.__qualname__
    @wraps(func)
    def wrapper(*args, **kwargs):
        log.debug(msg)  # (3) log msg
        return func(*args, **kwargs)
    return wrapper

@debug
def add(x,y):
    'Adds x and y'
    return x + y

if __name__ == '__main__':
    print(f'add(2,5) = {add(2,5)}')
    print(f'add.__qualname__ = {add.__qualname__}')
    print(f'add.__doc__ = {add.__doc__}')

        
