class Setter(Entity): _other_value = fields.StrField() _value = fields.StrField(mutable=True) def set_value(self, value): value = Setter._value.parse(value) self._value = value self._other_value = f'{value} world'
class CreatePost(Entity): _title = fields.StrField() _body = fields.StrField() _category_id = fields.StrField() _author = fields.LinkField(to=User) _description = fields.StrField() async def create(self) -> Post: self._validate_data() await self._resolve_category_id() try: return await Post.create( title=self._title, body=self._body, category_id=self._category_id, author=self._author, description=self._description ) except exceptions.ForeignKeyViolationError: raise ValueError('does not exists category with id: ' f'{self._category_id}') def _validate_data(self): # TODO: add this validation to nyoibo if not self._title: raise ValueError('title is obligatory') if not self._body: raise ValueError('body is obligatory') if not self._category_id: raise ValueError('category_id is obligatory') if not self._author: raise ValueError('author is obligatory') if not self._description: raise ValueError('description is obligatory') async def _resolve_category_id(self): if self._category_id.isdigit() is False: category = await Category.create(name=self._category_id) self._category_id = category.id
class Rate(Entity): _value = fields.StrField(mutable=True) _other_value = fields.StrField() _default = fields.StrField(default_value='hello world') _other_default = fields.IntField(default_value=1) _private = fields.StrField(private=True) _immutable = fields.StrField() _type = fields.StrField(choices=Types)
def test_required_value(): field = fields.StrField(required=True) with raises(RequiredValueError) as e: field.parse(None) assert str(e.value) == 'value is required'
class Example(Entity): value = fields.StrField()
class Model(Entity): _value = fields.StrField(required=True)
class Model2(Entity): _value = fields.StrField() _link = fields.LinkField(to=Model1)
class Model1(Entity): _link = fields.LinkField(to=Model0) _name = fields.StrField()
class Model0(Entity): _value = fields.StrField() _int_value = fields.IntField()
class Entity0(Entity, metaclass=OtherMetaEntity): _value = fields.StrField()
def test_str_max_length_is_positive(): with raises(AssertionError): fields.StrField(max_length=-1)
def test_str_max_length(): field = fields.StrField(max_length=10) with raises(StrLengthError) as e: field.parse('this is a longer string than max') assert str(e.value) == 'length value (32) is greater than max_value (10)'
class NewEntity(Entity): _field0 = fields.StrField() _field1 = fields.IntField()
class NewEntity(Entity): _value = fields.StrField()
def test_parse_str_value(value, expected_result): str_field = fields.StrField() assert str_field.parse(value) == expected_result