Search code examples
pythonpython-decorators

How to evaluate the parameter of a function called from within decorator's wrapper?


Inside the decorator's require_registered wrapper, how do I check if "John" is in registered users?

def require_registered(some_function):

    def wrapper(*args, **kwargs):

        if username_parameter_from_login_function in registered_users: #how to replace "username_parameter_from_login_function"?
            some_function(*args, **kwargs)
        else:
            print("User is not registed")

    return wrapper

@require_registered
def login(username):
    print(username + ' has been logged in')

login('John')

Solution

  • You should define your wrapper function to take username as a parameter as well:

    def wrapper(username, *args, **kwargs):
        if username in registered_users:
            some_function(username, *args, **kwargs)
        else:
            print("User is not registed")