def dump_schema(schema_obj):
json_schema = {
"type": "object",
"properties": {},
"required": [],
}
mapping = {v: k for k, v in schema_obj.TYPE_MAPPING.items()}
mapping[fields.Email] = text_type
mapping[fields.Dict] = dict
mapping[fields.List] = list
mapping[fields.Url] = text_type
mapping[fields.LocalDateTime] = datetime.datetime
for field_name, field in sorted(schema_obj.fields.items()):
schema = None
if field.__class__ in mapping:
pytype = mapping[field.__class__]
schema = _from_python_type(field, pytype)
elif isinstance(field, fields.Nested):
schema = _from_nested_schema(field)
elif issubclass(field.__class__, fields.Field):
for cls in mapping.keys():
if issubclass(field.__class__, cls):
pytype = mapping[cls]
schema = _from_python_type(field, pytype)
break
if schema is None:
raise ValueError('unsupported field type %s' % field)
field_name = field.dump_to or field.name
json_schema['properties'][field_name] = schema
if field.required:
json_schema['required'].append(field.name)
return json_schema