werkzeug.validate_arguments(func, args, kwargs, drop_extra=True)[source]

Checks if the function accepts the arguments and keyword arguments. Returns a new (args, kwargs) tuple that can safely be passed to the function without causing a TypeError because the function signature is incompatible. If drop_extra is set to True (which is the default) any extra positional or keyword arguments are dropped automatically.

The exception raised provides three attributes:

A set of argument names that the function expected but where missing.
A dict of keyword arguments that the function can not handle but where provided.
A list of values that where given by positional argument but the function cannot accept.

This can be useful for decorators that forward user submitted data to a view function:

from werkzeug.utils import ArgumentValidationError, validate_arguments

def sanitize(f):
    def proxy(request):
        data = request.values.to_dict()
            args, kwargs = validate_arguments(f, (request,), data)
        except ArgumentValidationError:
            raise BadRequest('The browser failed to transmit all '
                             'the data expected.')
        return f(*args, **kwargs)
    return proxy
  • func – the function the validation is performed against.
  • args – a tuple of positional arguments.
  • kwargs – a dict of keyword arguments.
  • drop_extra – set to False if you don’t want extra arguments to be silently dropped.

tuple in the form (args, kwargs).