Example #1
0
def test_marshal_nested_collection_default():
    class UserMapper(Mapper):

        __type__ = TestType

        id = field.String(required=True)
        name = field.String()

    user = TestType(id='1', name='mike')
    data = {
        'id': 2,
        'name': 'bob',
        'users': [{
            'id': '1',
            'name': 'ignore this'
        }]
    }

    def getter(session):
        if session.data['id'] == '1':
            return user

    f = field.Collection(field.Nested('UserMapper', getter=getter),
                         name='users')
    output = {}
    mapper_session = get_mapper_session(data=data, output=output)
    f.marshal(mapper_session)
    assert output == {'users': [user]}
    assert user.name == 'mike'
Example #2
0
def test_serialize_nested_collection():
    class UserMapper(Mapper):

        __type__ = TestType

        id = field.String(required=True, read_only=True)
        name = field.String()

    users = [TestType(id='1', name='mike'), TestType(id='2', name='jack')]
    post = TestType(id='1', users=users)

    output = {}
    f = field.Collection(field.Nested('UserMapper'), name='users')
    mapper_session = get_mapper_session(obj=post, output=output)
    f.serialize(mapper_session)

    assert output == {
        'users': [{
            'id': '1',
            'name': 'mike'
        }, {
            'id': '2',
            'name': 'jack'
        }]
    }
Example #3
0
def test_marshal_nested_collection_allow_updates_in_place_too_many_with_allow_create(
):
    # We're updating in place, there are more users in the input data
    # but allow_create is also enabled, so a new user should be added

    class UserMapper(Mapper):

        __type__ = TestType

        name = field.String()

    user = TestType(id='1', name='mike')
    data = {
        'id': 2,
        'name': 'bob',
        'users': [{
            'name': 'name1'
        }, {
            'name': 'name2'
        }]
    }

    f = field.Collection(field.Nested('UserMapper',
                                      allow_updates_in_place=True,
                                      allow_create=True),
                         name='users')
    output = {'users': [user]}
    mapper_session = get_mapper_session(data=data, output=output)

    f.marshal(mapper_session)

    assert output == {
        'users': [TestType(id='1', name='name1'),
                  TestType(name='name2')]
    }
Example #4
0
    class PostMapper(Mapper):

        __type__ = Post

        title = field.String()
        user = field.Nested('UserMapper', required=True, allow_create=True)
        readers = field.Collection(field.Nested('UserMapper'), required=False)
Example #5
0
def test_marshal_nested_collection_allow_updates_in_place_too_many():
    # We're updating in place, but there are more users in the input data
    # than already exist so an error should be raised

    class UserMapper(Mapper):

        __type__ = TestType

        name = field.String()

    user = TestType(id='1', name='mike')
    data = {
        'id': 2,
        'name': 'bob',
        'users': [{
            'name': 'name1'
        }, {
            'name': 'name2'
        }]
    }

    f = field.Collection(field.Nested('UserMapper',
                                      allow_updates_in_place=True),
                         name='users')
    output = {'users': [user]}
    mapper_session = get_mapper_session(data=data, output=output)
    with pytest.raises(FieldInvalid):
        f.marshal(mapper_session)
Example #6
0
def test_marshal_read_only_collection():

    f = field.Collection(field.Integer(), name='post_ids', read_only=True)
    output = {}
    data = {'post_ids': [2, 1]}
    mapper_session = get_mapper_session(data=data, output=output)
    f.marshal(mapper_session)
    assert output == {}
Example #7
0
def test_marshal_collection_requires_list():

    f = field.Collection(field.Integer(), name='post_ids')
    output = {}

    mapper_session = get_mapper_session(data={'post_ids': 1}, output=output)
    with pytest.raises(field.FieldInvalid):
        f.marshal(mapper_session)
Example #8
0
def test_serialize_flat_collection():

    f = field.Collection(field.Integer(), name='post_ids', source='posts')
    output = {}
    data = {'posts': [2, 1]}
    mapper_session = get_mapper_session(obj=data, output=output)
    f.serialize(mapper_session)
    assert output == {'post_ids': [2, 1]}
Example #9
0
    class PostMapper(Mapper):

        __type__ = Post

        title = field.String()
        user = field.Nested('UserMapper',
                            required=False,
                            allow_updates_in_place=True)
        readers = field.Collection(field.Nested('PostMapper',
                                                getter=foo_getter),
                                   required=False)
Example #10
0
def test_collection_proxies_name_to_wrapped_field():

    f = field.Collection(field.Integer(), name='post_ids')
    f2 = field.Collection(field.String(), name='test')

    with pytest.raises(field.FieldError):
        field.Collection(field.String(name='foo'))

    class UserMapper(Mapper):

        __type__ = TestType

        id = field.String(required=True)
        tags = field.Collection(field.String())

    assert f.name == 'post_ids'
    assert f2.name == 'test'

    mapper = UserMapper({})
    assert mapper.fields['tags'].name == 'tags'
Example #11
0
def test_marshal_nested_collection_allow_create():
    class UserMapper(Mapper):

        __type__ = TestType

        id = field.String(required=True)
        name = field.String()

    data = {'id': 2, 'name': 'bob', 'users': [{'id': '1', 'name': 'mike'}]}

    f = field.Collection(field.Nested('UserMapper', allow_create=True),
                         name='users')
    output = {}
    mapper_session = get_mapper_session(data=data, output=output)
    f.marshal(mapper_session)
    assert output == {'users': [TestType(id='1', name='mike')]}
Example #12
0
def test_marshal_nested_collection_allow_updates_in_place():
    class UserMapper(Mapper):

        __type__ = TestType

        name = field.String()

    user = TestType(id='1', name='mike')
    data = {'id': 2, 'name': 'bob', 'users': [{'name': 'new name'}]}

    f = field.Collection(field.Nested('UserMapper',
                                      allow_updates_in_place=True),
                         name='users')
    output = {'users': [user]}
    mapper_session = get_mapper_session(data=data, output=output)
    f.marshal(mapper_session)
    assert output == {'users': [user]}
    assert user.name == 'new name'
Example #13
0
    class PostMapper(Mapper):

        __type__ = TestType

        readers = field.Collection(field.Nested(UserMapper, allow_create=True),
                                   unique_on='id')
Example #14
0
    class UserMapper(Mapper):

        __type__ = TestType

        id = field.String(required=True)
        tags = field.Collection(field.String())
Example #15
0
File: data.py Project: larsks/kim
class ComplexMapper(Mapper):
    __type__ = Complex
    foo = field.String()
    bar = field.String(extra_serialize_pipes={'output': [bar_pipe]})
    sub = field.Nested(SubMapper)
    subs = field.Collection(field.Nested(SubMapper))
Example #16
0
    class PostMapper(Mapper):

        __type__ = TestType

        readers = field.Collection(
            field.Nested(UserMapper, getter=assert_scope))
class TechnicalExperienceMapper(BaseMapper):
    __type__ = TechnicalExperience
    title = field.String()
    items = field.Collection(field.String())
Example #18
0
class WeaponOfChoiceMapper(BaseMapper):
    __type__ = WeaponOfChoice
    title = field.String()
    items = field.Collection(field.String())
Example #19
0
    class PostMapper(Mapper):

        __type__ = TestType

        readers = field.Collection(field.Nested(UserMapper, allow_create=True),
                                   required=False)