0

How to combine decorators that take parameters?

Currently I have:

@app.route('/create/<id>', methods=['POST'])
@requiresAdmin
def create_room(id):
    pass

@app.route('/join/<id>')
@requiresAdmin
def join_room(id):
    pass

I would like to have:

@adminRoute('/create/<id>', methods=['POST'])
def create_room(id):
    pass

@adminRoute('/join/<id>')
def join_room(id):
    pass
ddg
  • 1,090
  • 1
  • 6
  • 17

1 Answers1

0
def adminRoute(*route_args, **route_kwargs):

    def outer(action_function):
        @app.route(*route_args, **route_kwargs)
        @requiresAdmin
        @functools.wraps(action_function)
        def inner(*f_args, **f_kwargs):
            return action_function(f_args, f_kwargs)
        return inner

    return outer
ddg
  • 1,090
  • 1
  • 6
  • 17