Source code for flask_swag.fields

"""
fields
======

Definitions of custom fields for marshmallow schema.

"""
from marshmallow import fields


[docs]class TypedDict(fields.Field): """Typed dict field.""" def __init__(self, key_field, nested_field, *args, **kwargs): super().__init__(*args, **kwargs) self.key_field = key_field self.nested_field = nested_field def _add_to_schema(self, field_name, schema): super()._add_to_schema(field_name, schema) self.key_field._add_to_schema(field_name, schema) self.nested_field._add_to_schema(field_name, schema) def _deserialize(self, value, attr, data): if value is None: return None ret = {} for key, val in value.items(): k = self.key_field.deserialize(key) v = self.nested_field.deserialize(val) ret[k] = v return ret def _serialize(self, value, attr, obj): if value is None: return None ret = {} def accessor(attr, d, default): return d.get(attr, default) for key in value: k = self.key_field._serialize(key, '', value) v = self.nested_field.serialize(key, value, accessor) ret[k] = v return ret