示例#1
0
文件: test_sqa.py 项目: larsks/kim
    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)
示例#2
0
文件: test_sqa.py 项目: larsks/kim
    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)
示例#3
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'
        }]
    }
示例#4
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')]
    }
示例#5
0
文件: test_nested.py 项目: larsks/kim
def test_marshal_nested_with_allow_create_and_allow_updates():
    # Users may only be passed by id or created if they don't exist and
    # updated

    class UserMapper(Mapper):

        __type__ = dict

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

    user = {'id': '1', 'name': 'mike'}

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

    test_field = field.Nested('UserMapper',
                              name='user',
                              getter=getter,
                              allow_create=True,
                              allow_updates=True)

    data1 = {'id': 2, 'name': 'bob', 'user': {'id': '1', 'name': 'a new name'}}
    output = {}
    mapper_session = get_mapper_session(data=data1, output=output)
    test_field.marshal(mapper_session)
    assert output == {'user': {'id': '1', 'name': 'a new name'}}
    assert user['name'] == 'a new name'

    data2 = {'id': 2, 'name': 'bob', 'user': {'id': '2', 'name': 'jack'}}
    output = {}
    mapper_session = get_mapper_session(data=data2, output=output)
    test_field.marshal(mapper_session)
    assert output == {'user': {'id': '2', 'name': 'jack'}}
示例#6
0
文件: test_nested.py 项目: larsks/kim
def test_marshal_nested_with_defaults():
    # Users may only be passed by id and may not be updated

    class UserMapper(Mapper):

        __type__ = dict

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

    user = {'id': '1', 'name': 'mike'}

    def getter(session):
        return user

    test_field = field.Nested('UserMapper', name='user', getter=getter)

    data1 = {
        'id': 2,
        'name': 'bob',
        'user': {
            'id': '1',
            'name': 'this should be ignored'
        }
    }
    output = {}
    mapper_session = get_mapper_session(data=data1, output=output)
    test_field.marshal(mapper_session)
    assert output == {'user': {'id': '1', 'name': 'mike'}}

    assert user['name'] == 'mike'
示例#7
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)
示例#8
0
文件: test_nested.py 项目: larsks/kim
def test_marshal_nested_with_getter():
    class UserMapper(Mapper):

        __type__ = dict

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

    users = {
        '1': {
            'id': '1',
            'name': 'mike'
        },
        '2': {
            'id': '2',
            'name': 'jack'
        }
    }

    def getter(session):
        return users[session.data['id']]

    test_field = field.Nested('UserMapper', name='user', getter=getter)

    data1 = {'id': 2, 'name': 'bob', 'user': {'id': '1'}}
    output = {}
    mapper_session = get_mapper_session(data=data1, output=output)
    test_field.marshal(mapper_session)
    assert output == {'user': {'id': '1', 'name': 'mike'}}

    data2 = {'id': 2, 'name': 'bob', 'user': {'id': '2'}}
    output = {}
    mapper_session = get_mapper_session(data=data2, output=output)
    test_field.marshal(mapper_session)
    assert output == {'user': {'id': '2', 'name': 'jack'}}
示例#9
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'
示例#10
0
文件: test_nested.py 项目: larsks/kim
def test_get_mapper_not_a_valid_mapper():
    class Foo(object):
        pass

    f = field.Nested(Foo, name='user')
    with pytest.raises(MapperError):
        f.get_mapper(data={'foo': 'id'})
示例#11
0
文件: test_nested.py 项目: larsks/kim
    class DocumentMapper(Mapper):
        __type__ = dict

        id = field.String(required=True)
        name = field.String()
        user = field.Nested('UserMapper',
                            name='user',
                            allow_partial_updates=True)
示例#12
0
文件: test_sqa.py 项目: larsks/kim
    class PostMapper(Mapper):

        __type__ = Post

        title = field.String()
        user = field.Nested('UserMapper',
                            required=True,
                            allow_updates_in_place=True)
示例#13
0
文件: test_nested.py 项目: larsks/kim
def test_get_mapper_mapper_type():
    class UserMapper(Mapper):

        __type__ = dict

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

    f = field.Nested(UserMapper, name='user')
    assert isinstance(f.get_mapper(data={'foo': 'id'}), UserMapper)
示例#14
0
class UserMapper(Mapper):
    __type__ = User

    id = field.Integer(read_only=True)
    name = field.String()
    is_admin = field.Boolean(required=False, default=False)
    company = field.Nested(CompanyMapper, getter=company_getter)

    __roles__ = {
        'overview': whitelist('id', 'name')
    }
示例#15
0
文件: test_nested.py 项目: larsks/kim
def test_marshal_nested():
    class UserMapper(Mapper):

        __type__ = dict

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

    data = {'id': 2, 'name': 'bob', 'user': {'id': '1', 'name': 'mike'}}
    test_field = field.Nested('UserMapper', name='user', allow_create=True)

    output = {}
    mapper_session = get_mapper_session(data=data, output=output)
    test_field.marshal(mapper_session)
    assert output == {'user': {'id': '1', 'name': 'mike'}}
示例#16
0
文件: test_nested.py 项目: larsks/kim
def test_serialise_nested():
    class UserMapper(Mapper):

        __type__ = dict

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

    data = {'id': 2, 'name': 'bob', 'user': {'id': '1', 'name': 'mike'}}
    test_field = field.Nested('UserMapper', name='user')

    output = {}
    mapper_session = get_mapper_session(obj=data, output=output)
    test_field.serialize(mapper_session)
    assert output == {'user': {'id': '1', 'name': 'mike'}}
示例#17
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')]}
示例#18
0
文件: test_nested.py 项目: larsks/kim
def test_marshal_nested_with_getter_failure():
    class UserMapper(Mapper):

        __type__ = dict

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

    def getter(session):
        return None

    test_field = field.Nested('UserMapper', name='user', getter=getter)

    data = {'id': 2, 'name': 'bob', 'user': {'id': '1'}}
    output = {}
    mapper_session = get_mapper_session(data=data, output=output)
    with pytest.raises(FieldInvalid):
        test_field.marshal(mapper_session)
示例#19
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'
示例#20
0
文件: test_nested.py 项目: larsks/kim
def test_marshal_nested_with_allow_updates_in_place():
    # No getter required, but the existing user object can be changed

    class UserMapper(Mapper):

        __type__ = dict

        name = field.String()

    user = {'id': '1', 'name': 'mike'}
    output = {'user': user}

    test_field = field.Nested('UserMapper',
                              name='user',
                              allow_updates_in_place=True)

    data1 = {'id': 2, 'name': 'bob', 'user': {'name': 'a new name'}}
    mapper_session = get_mapper_session(data=data1, output=output)
    test_field.marshal(mapper_session)
    assert output == {'user': {'id': '1', 'name': 'a new name'}}
    assert user['name'] == 'a new name'
示例#21
0
文件: test_nested.py 项目: larsks/kim
def test_marshal_nested_with_allow_updates():
    # Users may only be passed by id and may be updated, but not created

    class UserMapper(Mapper):

        __type__ = dict

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

    user = {'id': '1', 'name': 'mike'}

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

    test_field = field.Nested('UserMapper',
                              name='user',
                              getter=getter,
                              allow_updates=True)

    data1 = {'id': 2, 'name': 'bob', 'user': {'id': '1', 'name': 'a new name'}}
    output = {}
    mapper_session = get_mapper_session(data=data1, output=output)
    test_field.marshal(mapper_session)
    assert output == {'user': {'id': '1', 'name': 'a new name'}}
    assert user['name'] == 'a new name'

    data2 = {
        'id': 2,
        'name': 'bob',
        'user': {
            'id': '2',
            'name': 'should not allow this to be created'
        }
    }
    output = {}
    mapper_session = get_mapper_session(data=data2, output=output)
    with pytest.raises(FieldInvalid):
        test_field.marshal(mapper_session)
示例#22
0
文件: test_nested.py 项目: larsks/kim
def test_marshal_nested_with_role():
    class UserMapper(Mapper):

        __type__ = dict

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

        __roles__ = {
            'public': [
                'name',
            ]
        }

    data = {'id': 2, 'name': 'bob', 'user': {'id': '1', 'name': 'mike'}}
    test_field = field.Nested('UserMapper',
                              name='user',
                              role='public',
                              allow_create=True)

    output = {}
    mapper_session = get_mapper_session(data=data, output=output)
    test_field.marshal(mapper_session)
    assert output == {'user': {'name': 'mike'}}
示例#23
0
    class PostMapper(Mapper):

        __type__ = TestType

        readers = field.Collection(
            field.Nested(UserMapper, getter=assert_scope))
示例#24
0
文件: test_sqa.py 项目: larsks/kim
    class PostMapper(Mapper):

        __type__ = Post

        title = field.String()
        user = field.Nested('UserMapper', required=True, getter=getter)
示例#25
0
    class PostMapper(Mapper):

        __type__ = TestType

        readers = field.Collection(field.Nested(UserMapper, allow_create=True),
                                   unique_on='id')
示例#26
0
文件: data.py 项目: 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))
示例#27
0
    class PostMapper(Mapper):

        __type__ = TestType

        readers = field.Collection(field.Nested(UserMapper, allow_create=True),
                                   required=False)
示例#28
0
文件: test_nested.py 项目: larsks/kim
def test_nested_defers_mapper_checks():
    """ensure that instantiating a nested field with an invalid mapper
    doesn't emit an error until the nested mapper is actually needed.

    """
    field.Nested('IDontExist', name='user')
示例#29
0
文件: test_nested.py 项目: larsks/kim
    class Outer(Mapper):
        __type__ = dict

        user = field.Nested(Inner, source='__self__', allow_create=True)
        status = field.Integer()
示例#30
0
文件: test_nested.py 项目: larsks/kim
def test_get_mapper_not_registered():

    f = field.Nested('UserMapper', name='user')
    with pytest.raises(MapperError):
        f.get_mapper(data={'foo': 'id'})