(val, allowed, required, allowed_values=None, defaults=None)
return val
Takes a dictionary or a list of dictionaries and check if all keys are in
    the set of allowed keys, if all required keys are present and if the values
    of a specific key are ok.

    :param val:            Dictionaries to check.
    :param allowed:        Set of allowed keys.
    :param required:       Set of required keys.
    :param allowed_values: Dictionary with keys and sets of their allowed
                           values.
    :param defaults:       Dictionary with default values.
    :returns:              List of checked dictionaries.
Takes a dictionary or a list of dictionaries and check if all keys are in
    the set of allowed keys, if all required keys are present and if the values
    of a specific key are ok.
Takes a dictionary or a list of dictionaries and check if all keys are in the set of allowed keys if all required keys are present and if the values of a specific key are ok .
def ensure_format(val, allowed, required, allowed_values=None, defaults=None):
    '''Takes a dictionary or a list of dictionaries and check if all keys are in
    the set of allowed keys, if all required keys are present and if the values
    of a specific key are ok.

    :param val:            Dictionaries to check.
    :param allowed:        Set of allowed keys.
    :param required:       Set of required keys.
    :param allowed_values: Dictionary with keys and sets of their allowed
                           values.
    :param defaults:       Dictionary with default values.
    :returns:              List of checked dictionaries.
    '''
    if not val:
        return []
    if allowed_values is None:
        allowed_values = {}
    if defaults is None:
        defaults = {}
    # Make shure that we have a list of dicts. Even if there is only one.
    if not isinstance(val, list):
        val = [val]
    for elem in val:
        if not isinstance(elem, dict):
            raise ValueError('Invalid data (value is no dictionary)')
        # Set default values

        version = sys.version_info[0]

        if version == 2:
            items = defaults.iteritems()
        else:
            items = defaults.items()

        for k, v in items:
            elem[k] = elem.get(k, v)
        if not set(elem.keys()) <= allowed:
            raise ValueError('Data contains invalid keys')
        if not set(elem.keys()) >= required:
            raise ValueError('Data contains not all required keys')

        if version == 2:
            values = allowed_values.iteritems()
        else:
            values = allowed_values.items()

        for k, v in values:
            if elem.get(k) and not elem[k] in v:
                raise ValueError('Invalid value for %s' % k)
    return val
def ensure_format ( val , allowed , required , allowed_values = None , defaults = None ) : if not val : return [ ] if allowed_values is None : allowed_values = { } if defaults is None : defaults = { } # Make shure that we have a list of dicts. Even if there is only one. if not isinstance ( val , list ) : val = [ val ] for elem in val : if not isinstance ( elem , dict ) : raise ValueError ( 'Invalid data (value is no dictionary)' ) # Set default values version = sys . version_info [ 0 ] if version == 2 : items = defaults . iteritems ( ) else : items = defaults . items ( ) for k , v in items : elem [ k ] = elem . get ( k , v ) if not set ( elem . keys ( ) ) <= allowed : raise ValueError ( 'Data contains invalid keys' ) if not set ( elem . keys ( ) ) >= required : raise ValueError ( 'Data contains not all required keys' ) if version == 2 : values = allowed_values . iteritems ( ) else : values = allowed_values . items ( ) for k , v in values : if elem . get ( k ) and not elem [ k ] in v : raise ValueError ( 'Invalid value for %s' % k ) return val