Пример #1
0
def test_parse_link_field():
    class NewEntity(Entity):
        _value = fields.StrField()

    link_field = fields.LinkField(to=NewEntity)
    new_entity = NewEntity()
    assert link_field.parse(new_entity) == new_entity
Пример #2
0
def test_wrong_link_value(value):
    class Example(Entity):
        _value = fields.StrField()

    link_field = fields.LinkField(to=Example)
    with raises(FieldValueError) as e:
        link_field.parse(value)
    assert str(e.value) == f'{type(value)} is not a valid value for LinkField'
Пример #3
0
def test_parse_link_field_from_dict_with_wrong_data():
    class NewEntity(Entity):
        _field0 = fields.StrField()
        _field1 = fields.IntField()

    link_field = fields.LinkField(to=NewEntity)
    data = {'field32': 'hi', 'field2': '10'}
    parsed = link_field.parse(data)
    assert parsed.field0 is None
    assert parsed.field1 is None
Пример #4
0
def test_parse_link_field_from_dict():
    class NewEntity(Entity):
        _field0 = fields.StrField()
        _field1 = fields.IntField()

    link_field = fields.LinkField(to=NewEntity)
    data = {'field0': 'hi', 'field1': '10'}
    parsed = link_field.parse(data)
    assert parsed.field0 == 'hi'
    assert parsed.field1 == 10
Пример #5
0
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
Пример #6
0
 class Model2(Entity):
     _value = fields.StrField()
     _link = fields.LinkField(to=Model1)
Пример #7
0
 class Model1(Entity):
     _link = fields.LinkField(to=Model0)
     _name = fields.StrField()
Пример #8
0
 class Entity1(Entity):
     _entity0 = fields.LinkField(to=Entity0)
Пример #9
0
 class Example(Entity):
     _value = fields.LinkField(to=to)
Пример #10
0
def test_parse_none_link_field():
    class NewEntity(Entity):
        pass

    link_field = fields.LinkField(to=NewEntity)
    assert link_field.parse(None) is None