UnsupportedValueError on custom marshmallow.fields inside schema
pingsutw opened this issue · 0 comments
pingsutw commented
Fail to dump JSON SCHEMA when there is a custom field inside the scheme.
To reproduce:
class PinCode(fields.Field):
"""Field that serializes to a string of numbers and deserializes
to a list of numbers.
"""
def _serialize(self, value, attr, obj, **kwargs):
if value is None:
return ""
return "".join(str(d) for d in value)
def _deserialize(self, value, attr, data, **kwargs):
return [int(c) for c in value]
class UserSchema(Schema):
name = fields.String()
email = fields.String()
pin_code = PinCode()
bowie = dict(name="David Bowie", email="pingsutw@gmail.com", pin_code="1234")
schema = UserSchema()
pprint(schema.fields)
data = schema.dump(bowie)
result = schema.load(data)
print(JSONSchema().dump(schema)) # <- Error occurs here.
Error message:
return self._serialize(value, attr, obj, **kwargs)
File "/Users/kevin/opt/anaconda3/envs/flyte/lib/python3.8/site-packages/marshmallow/fields.py", line 1864, in _serialize
return self._serialize_method(obj)
File "/Users/kevin/opt/anaconda3/envs/flyte/lib/python3.8/site-packages/marshmallow_jsonschema/base.py", line 163, in get_properties
schema = self._get_schema_for_field(obj, field)
File "/Users/kevin/opt/anaconda3/envs/flyte/lib/python3.8/site-packages/marshmallow_jsonschema/base.py", line 266, in _get_schema_for_field
pytype = self._get_python_type(field)
File "/Users/kevin/opt/anaconda3/envs/flyte/lib/python3.8/site-packages/marshmallow_jsonschema/base.py", line 251, in _get_python_type
raise UnsupportedValueError("unsupported field type %s" % field)
marshmallow_jsonschema.exceptions.UnsupportedValueError: unsupported field type <fields.PinCode(dump_default=<marshmallow.missing>, attribute=None, validate=None, required=False, load_only=False, dump_only=False, load_default=<marshmallow.missing>, allow_none=False, error_messages={'required': 'Missing data for required field.', 'null': 'Field may not be null.', 'validator_failed': 'Invalid value.'})>