def get_prep_value(self, value, instance=None): try: value = self.prepare(value) if not value and self.null and self.default is not None: value = self.default else: value = self.to_python(value) if value not in self.choices: if not self.null: raise exceptions.ChoiceError( "Value \'%s\' does not belong to %s" % (value, self.choices)) value = None transform = self.get_transform_method(instance) value = transform(value) if not self.validator().validate(value): raise exceptions.FieldError(self.validator.validation_message) return value except exceptions.ChoiceError: raise except exceptions.FieldError: raise except ValueError: self.raise_type_error(value)
def __init__(self, **kwargs): super(Field, self).__init__(kwargs) self.null = kwargs.pop("null", False) self.default = kwargs.pop("default", None) if self.default and not self.null: raise exceptions.FieldError( "You cannot provide a default without setting the field as nullable" ) if 'row_num' in kwargs: self.position = kwargs.pop('row_num') else: self.position = Field.position Field.position += 1 if 'match' in kwargs: self.match = kwargs.pop('match') self.validator = kwargs.pop('validator', AlwaysValidValidator) if 'multiple' in kwargs: self.has_multiple = kwargs.pop('multiple') self.prepare = kwargs.pop('prepare', lambda val: val) if 'keys' in kwargs and isinstance(self, ComposedKeyField): self.keys = kwargs.pop('keys') self.choices = kwargs.pop('choices', AllChoices()) if len(kwargs) > 0: raise ValueError("Arguments %s unexpected" % kwargs.keys())