def test_marshmallow_schema_helpers(self):
class CheckUnknownSchema(marshmallow.Schema):
__check_unknown_fields = marshmallow.validates_schema(
pass_original=True)(schema_validator_check_unknown_fields)
a = marshmallow.fields.Int()
_, errors = CheckUnknownSchema().load({'a': 1, 'dummy': 2})
assert errors == {'_schema': ['Unknown field name dummy.']}
data, errors = CheckUnknownSchema().load({'a': 1})
assert not errors
assert data == {'a': 1}
@self.instance.register
class Doc(Document):
a = fields.IntField()
@property
def prop(self):
return "I'm a property !"
class VanillaSchema(marshmallow.Schema):
a = marshmallow.fields.Int()
class CustomGetAttributeSchema(VanillaSchema):
get_attribute = schema_from_umongo_get_attribute
data, errors = VanillaSchema().dump(Doc())
assert not errors
assert data == {'a': None}
data, errors = CustomGetAttributeSchema().dump(Doc())
assert not errors
assert data == {}
data, errors = CustomGetAttributeSchema().dump(Doc(a=1))
assert not errors
assert data == {'a': 1}
class MySchemaFromUmongo(SchemaFromUmongo):
a = marshmallow.fields.Int()
prop = marshmallow.fields.String(dump_only=True)
data, errors = MySchemaFromUmongo().dump(Doc())
assert not errors
assert data == {'prop': "I'm a property !"}
_, errors = MySchemaFromUmongo().load({'a': 1, 'dummy': 2})
assert errors == {'_schema': ['Unknown field name dummy.']}
_, errors = MySchemaFromUmongo().load({'a': 1, 'prop': '2'})
assert errors == {'_schema': ['Unknown field name prop.']}