Exemplo n.º 1
0
def validate_params_of_list(key, value):
    """
    Assumes the `value` is a list ...
    """
    errors = []
    config_length = len(value)
    # has multiple values
    if not isinstance(value, (list, tuple)):
        try:
            wtf_is_it = type(value).__name__
        except AttributeError:  # pragma: no cover
            wtf_is_it = '???'
        return [E002(obj=key, hint="Got `%s` instead" % wtf_is_it)]
    if isinstance(value, (list, tuple)) and config_length not in (1, 2):
        return [E003(obj=key)]

    # first try to make a form
    form = validate_as_dict(key, value=value[0])
    ignore_defaults_set_check = True
    if form is None:
        ignore_defaults_set_check = False
        if not isinstance(value[0], string_types):
            return [E004(obj=key)]
        # then try and import a form
        try:
            form = import_string(value[0])
        except (ImportError, AttributeError) as exc:
            return [E006(obj=key)]
        # make sure our value feels like a form
        try:
            validate_formish(form)
        except ValidationError:
            errors.append(E007(obj=key))
            # we won't have `base_fields`, so don't check it ...
            ignore_defaults_set_check = True

    # make sure the second param feels like a dictionary
    if config_length == 2:
        try:
            validate_default(value[1])
        except ValidationError as exc:
            errors.append(E005(obj=key))
        else:
            # if the first part is not a dict, and the second part is,
            # report on what is missing.
            if ignore_defaults_set_check is False:
                fields_in_form = frozenset(form.base_fields.keys())
                fields_in_defaults = frozenset(value[1].keys())
                missing = fields_in_form - fields_in_defaults
                if missing:
                    errors.append(I001(
                        obj=key, msg='The following keys are not in '
                                     'the defaults: %s' % ', '.join(missing)))
    return errors
Exemplo n.º 2
0
def validate_as_dict(key, value):
    """
    Returns `True` if it's a dict we can generate a form for,
    `False` if it's not, or an Error instance comes out of the form.
    """
    try:
        validate_default(value)
        form = generate_form(value)
    except ValidationError:
        return None
    try:
        validate_formish(form)
        return form
    except ValidationError:
        return None  # E007(obj=key)