class BlogPost(Model): id = Uuid(default_value=uuid4) title = String(validators=[ min_length(3), max_length(100), regex(r'^([A-Za-z0-9- !.]*)$') ]) body = String(default_value=u'Lorem ipsum', error_key='text') meta_data = Dict(mapping={'corrector': String(), 'reviewer': String()}) published = Boolean() likes = Integer(required=False) category = String(required=False) tags = List(property=String(validators=[min_length(3)]), error_key='category') author = Object(model_class=Author) created_on = DateTime(default_value=datetime.now) updated_on = DateTime(default_value=datetime.now) revisions = List(required=False, property=Object(model_class=Revision)) @model_validator(error_key='category') def category_or_tags(self): assert self.tags is not None or self.category is not None, ERROR_REQUIRED def __init__(self, **kwargs): super(BlogPost, self).__init__(**kwargs) self.foo = "bar"
def test_object_valid_1(): """Should be ok""" class Foo(Model): bar = String() test_object = Object(model_class=Foo) test_object.validate(Foo(bar="baz")) assert True
def test_object_invalid_1(): """Wrong type""" class Foo(Model): bar = String() test_object = Object(model_class=Foo) with assert_raises(InvalidPropertyError) as cm: test_object.validate("foo") assert cm.exception.error == 'invalid'
def test_object_default_mutable(): """Mutating the property default value after providing it should not result in an altered default""" class Foo(Model): bar = String() default_object = Foo(bar="baz") test_object = Object(model_class=Foo, default_value=default_object) default_object.bar = "foo" assert test_object.default.bar == "baz"