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