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
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)