Exemple #1
0
 def to_representation(self, value):
     fields = copy.deepcopy(self._declared_fields)
     return {
         key: field.to_representation(val) if val is not None else None
         for key, val, field in ((six.text_type(key), val, fields.get(key, self.child)) for key, val in value.items())
         if not field.write_only
     }
Exemple #2
0
    def run_child_validation(self, data):
        result = {}

        if not data and self.allow_blank:
            return result

        errors = collections.OrderedDict()
        fields = copy.deepcopy(self._declared_fields)
        keys = set(fields.keys()) | set(data.keys())

        for key in keys:
            value = data.get(key, empty)
            key = six.text_type(key)
            field = fields.get(key, self.child)
            try:
                if field.read_only:
                    continue  # Ignore read_only fields, as Serializer seems to do.
                result[key] = field.run_validation(value)
            except ValidationError as e:
                errors[key] = e.detail
            except SkipField:
                pass

        if not errors:
            return result
        raise ValidationError(errors)