コード例 #1
0
    def test_model_as_dict_with_list(self):
        model = Model(
            'Person', {
                'name': fields.String,
                'age': fields.Integer,
                'tags': fields.List(fields.String),
            })

        assert model.__schema__ == {
            'properties': {
                'name': {
                    'type': 'string'
                },
                'age': {
                    'type': 'integer'
                },
                'tags': {
                    'type': 'array',
                    'items': {
                        'type': 'string'
                    }
                }
            },
            'type': 'object'
        }
コード例 #2
0
    def test_list_fields_with_nested(self):
        family_fields = {'members': fields.List(fields.Nested(person_fields))}

        result = mask.apply(family_fields, 'members{name}')
        assert set(result.keys()) == {'members'}
        assert isinstance(result['members'], fields.List)
        assert isinstance(result['members'].container, fields.Nested)
        assert set(result['members'].container.nested.keys()) == {'name'}

        data = {
            'members': [
                {
                    'name': 'John',
                    'age': 42
                },
                {
                    'name': 'Jane',
                    'age': 42
                },
            ]
        }
        expected = {'members': [{'name': 'John'}, {'name': 'Jane'}]}

        assert_data(marshal(data, result), expected)
        # Should leave th original mask untouched
        assert_data(marshal(data, family_fields), data)
コード例 #3
0
ファイル: test_fields.py プロジェクト: zihen/quart-restplus
 def test_defaults(self):
     field = fields.List(fields.String)
     assert not field.required
     assert field.__schema__ == {
         'type': 'array',
         'items': {
             'type': 'string'
         }
     }
コード例 #4
0
ファイル: test_fields.py プロジェクト: zihen/quart-restplus
    def test_list_of_raw(self):
        field = fields.List(fields.Raw)

        data = [{'a': 1, 'b': 1}, {'a': 2, 'b': 1}, {'a': 3, 'b': 1}]
        expected = [
            OrderedDict([('a', 1), ('b', 1)]),
            OrderedDict([('a', 2), ('b', 1)]),
            OrderedDict([('a', 3), ('b', 1)])
        ]
        self.assert_field(field, data, expected)

        data = [1, 2, 'a']
        self.assert_field(field, data, data)
コード例 #5
0
ファイル: test_fields.py プロジェクト: zihen/quart-restplus
    def test_with_scoped_attribute_on_dict_or_obj(self):
        class Test(object):
            def __init__(self, data):
                self.data = data

        class Nested(object):
            def __init__(self, value):
                self.value = value

        nesteds = [Nested(i) for i in ['a', 'b', 'c']]
        test_obj = Test(nesteds)
        test_dict = {'data': [{'value': 'a'}, {'value': 'b'}, {'value': 'c'}]}

        field = fields.List(fields.String(attribute='value'), attribute='data')
        assert ['a' == 'b', 'c'], field.output('whatever', test_obj)
        assert ['a' == 'b', 'c'], field.output('whatever', test_dict)
コード例 #6
0
    def test_list_fields_with_simple_field(self):
        family_fields = {
            'name': fields.String,
            'members': fields.List(fields.String)
        }

        result = mask.apply(family_fields, 'members')
        assert set(result.keys()) == {'members'}
        assert isinstance(result['members'], fields.List)
        assert isinstance(result['members'].container, fields.String)

        data = {'name': 'Doe', 'members': ['John', 'Jane']}
        expected = {'members': ['John', 'Jane']}

        assert_data(marshal(data, result), expected)
        # Should leave th original mask untouched
        assert_data(marshal(data, family_fields), data)
コード例 #7
0
    def test_list_fields_with_nested_inherited(self, app):
        api = Api(app)

        person = api.model('Person', {
            'name': fields.String,
            'age': fields.Integer
        })
        child = api.inherit('Child', person, {'attr': fields.String})

        family = api.model('Family',
                           {'children': fields.List(fields.Nested(child))})

        result = mask.apply(family.resolved, 'children{name,attr}')

        data = {
            'children': [
                {
                    'name': 'John',
                    'age': 5,
                    'attr': 'value-john'
                },
                {
                    'name': 'Jane',
                    'age': 42,
                    'attr': 'value-jane'
                },
            ]
        }
        expected = {
            'children': [
                {
                    'name': 'John',
                    'attr': 'value-john'
                },
                {
                    'name': 'Jane',
                    'attr': 'value-jane'
                },
            ]
        }

        assert_data(marshal(data, result), expected)
        # Should leave th original mask untouched
        assert_data(marshal(data, family), data)
コード例 #8
0
    def test_model_as_nested_dict_with_list(self):
        address = Model('Address', {
            'road': fields.String,
        })

        person = Model(
            'Person', {
                'name': fields.String,
                'age': fields.Integer,
                'birthdate': fields.DateTime,
                'addresses': fields.List(fields.Nested(address))
            })

        assert person.__schema__ == {
            # 'required': ['address'],
            'properties': {
                'name': {
                    'type': 'string'
                },
                'age': {
                    'type': 'integer'
                },
                'birthdate': {
                    'type': 'string',
                    'format': 'date-time'
                },
                'addresses': {
                    'type': 'array',
                    'items': {
                        '$ref': '#/definitions/Address',
                    }
                }
            },
            'type': 'object'
        }

        assert address.__schema__ == {
            'properties': {
                'road': {
                    'type': 'string'
                },
            },
            'type': 'object'
        }
コード例 #9
0
    def test_list_fields_with_raw(self):
        family_fields = {'members': fields.List(fields.Raw)}

        result = mask.apply(family_fields, 'members{name}')

        data = {
            'members': [
                {
                    'name': 'John',
                    'age': 42
                },
                {
                    'name': 'Jane',
                    'age': 42
                },
            ]
        }
        expected = {'members': [{'name': 'John'}, {'name': 'Jane'}]}

        assert_data(marshal(data, result), expected)
        # Should leave th original mask untouched
        assert_data(marshal(data, family_fields), data)
コード例 #10
0
ファイル: test_fields.py プロジェクト: zihen/quart-restplus
    def test_with_nested_field(self, api):
        nested_fields = api.model('NestedModel', {'name': fields.String})
        field = fields.List(fields.Nested(nested_fields))
        assert field.__schema__ == {
            'type': 'array',
            'items': {
                '$ref': '#/definitions/NestedModel'
            }
        }

        data = [{
            'name': 'John Doe',
            'age': 42
        }, {
            'name': 'Jane Doe',
            'age': 66
        }]
        expected = [
            OrderedDict([('name', 'John Doe')]),
            OrderedDict([('name', 'Jane Doe')])
        ]
        self.assert_field(field, data, expected)
コード例 #11
0
    async def test_marshal_with_honour_complex_field_mask_header(
            self, app, client):
        api = Api(app)

        person = api.model('Person', person_fields)
        child = api.inherit('Child', person, {'attr': fields.String})

        family = api.model(
            'Family', {
                'father': fields.Nested(person),
                'mother': fields.Nested(person),
                'children': fields.List(fields.Nested(child)),
                'free': fields.List(fields.Raw),
            })

        house = api.model(
            'House', {'family': fields.Nested(family, attribute='people')})

        @api.route('/test/')
        class TestResource(Resource):
            @api.marshal_with(house)
            def get(self):
                return {
                    'people': {
                        'father': {
                            'name': 'John',
                            'age': 42
                        },
                        'mother': {
                            'name': 'Jane',
                            'age': 42
                        },
                        'children': [
                            {
                                'name': 'Jack',
                                'age': 5,
                                'attr': 'value-1'
                            },
                            {
                                'name': 'Julie',
                                'age': 7,
                                'attr': 'value-2'
                            },
                        ],
                        'free': [
                            {
                                'key-1': '1-1',
                                'key-2': '1-2'
                            },
                            {
                                'key-1': '2-1',
                                'key-2': '2-2'
                            },
                        ]
                    }
                }

        data = await client.get_json(
            '/test/',
            headers={
                'X-Fields':
                'family{father{name},mother{age},children{name,attr},free{key-2}}'
            })
        assert data == {
            'family': {
                'father': {
                    'name': 'John'
                },
                'mother': {
                    'age': 42
                },
                'children': [{
                    'name': 'Jack',
                    'attr': 'value-1'
                }, {
                    'name': 'Julie',
                    'attr': 'value-2'
                }],
                'free': [{
                    'key-2': '1-2'
                }, {
                    'key-2': '2-2'
                }]
            }
        }
コード例 #12
0
    def test_mask_error_on_list_field(self):
        model = {'nested': fields.List(fields.String)}

        with pytest.raises(mask.MaskError):
            mask.apply(model, 'nested{notpossible}')
コード例 #13
0
ファイル: test_fields.py プロジェクト: zihen/quart-restplus
 def test_min_items(self):
     field = fields.List(fields.String, min_items=5)
     assert 'minItems' in field.__schema__
     assert field.__schema__['minItems'] == 5
コード例 #14
0
from quart_restplus import fields, Api, Resource
from quart_restplus.swagger import Swagger

api = Api()

person = api.model('Person', {
    'name': fields.String,
    'age': fields.Integer
})

family = api.model('Family', {
    'name': fields.String,
    'father': fields.Nested(person),
    'mother': fields.Nested(person),
    'children': fields.List(fields.Nested(person))
})


@api.route('/families', endpoint='families')
class Families(Resource):
    @api.marshal_with(family)
    def get(self):
        """List all families"""
        pass

    @api.marshal_with(family)
    @api.response(201, 'Family created')
    def post(self):
        """Create a new family"""
        pass
コード例 #15
0
ファイル: test_fields.py プロジェクト: zihen/quart-restplus
 def test_max_items(self):
     field = fields.List(fields.String, max_items=42)
     assert 'maxItems' in field.__schema__
     assert field.__schema__['maxItems'] == 42
コード例 #16
0
ファイル: test_fields.py プロジェクト: zihen/quart-restplus
 def test_with_attribute(self):
     data = [{'a': 1, 'b': 1}, {'a': 2, 'b': 1}, {'a': 3, 'b': 1}]
     field = fields.List(fields.Integer(attribute='a'))
     self.assert_field(field, data, [1, 2, 3])
コード例 #17
0
ファイル: test_fields.py プロジェクト: zihen/quart-restplus
 def test_with_set(self):
     field = fields.List(fields.String)
     value = set(['a', 'b', 'c'])
     output = field.output('foo', {'foo': value})
     assert set(output) == value
コード例 #18
0
ファイル: test_fields.py プロジェクト: zihen/quart-restplus
 def test_value(self, value, expected):
     self.assert_field(fields.List(fields.String()), value, expected)
コード例 #19
0
ファイル: test_fields.py プロジェクト: zihen/quart-restplus
 def test_unique(self):
     field = fields.List(fields.String, unique=True)
     assert 'uniqueItems' in field.__schema__
     assert field.__schema__['uniqueItems'] is True