跳转到主要内容

快速且灵活的对象映射(序列化、打包)

项目描述

Lion

Lion是一个非常灵活且快速的将对象映射到字典的库。它使用声明式API,并支持类似于GraphQL的查询语言。与其他序列化库不同,它还允许跳过整个字段,而不是在字典中使用null值。

它受到了像serpymarshmallowDjango REST FrameworkKim这样的库的启发。

示例

import lion

class GroupMapper(lion.Mapper):
    id = lion.UUIDField()
    name = lion.StrField()

class UserMapper(lion.Mapper):
    id = lion.UUIDField()
    email = lion.StrField(condition=lion.skip_empty)
    first_name = lion.StrField()
    last_name = lion.StrField()
    groups = lion.ListField(GroupMapper)

user = User(
    id=UUID('ad94d0e8-2526-4d9b-ad76-0fbffcf41033'),
    email='john.doe@example.com',
    first_name='John',
    last_name='Doe',
    groups=[
        Group(
            id=UUID('95a326fc-32e5-4d9b-a385-1ea1257d98da'),
            name='Awesome people'
        )
    ]
)

# Dump all fields to a dictionary
assert UserMapper().dump(user) == {
    'id': 'ad94d0e8-2526-4d9b-ad76-0fbffcf41033',
    'email': 'john.doe@example.com',
    'first_name': 'John',
    'last_name': 'Doe',
    'groups': [
        {
            'id': '95a326fc-32e5-4d9b-a385-1ea1257d98da',
            'name': 'Awesome people'
        }
    ]
}

# Load user object from a dictionary
assert user == UserMapper().load({
    'id': 'ad94d0e8-2526-4d9b-ad76-0fbffcf41033',
    'email': 'john.doe@example.com',
    'first_name': 'John',
    'last_name': 'Doe',
    'groups': [
        {
            'id': '95a326fc-32e5-4d9b-a385-1ea1257d98da',
            'name': 'Awesome people'
        }
    ]
})

查询语言

通过使用类似GraphQL的查询语言,可以只转储和加载给定结构的部分

# Dump a subset of fields
assert UserMapper('{id,email}').dump(user) == {
    'id': 'ad94d0e8-2526-4d9b-ad76-0fbffcf41033',
    'email': 'john.doe@example.com'
}

# Dump subset of a nested mapper
assert UserMapper('{id,email,groups{id}}').dump(user) == {
    'id': 'ad94d0e8-2526-4d9b-ad76-0fbffcf41033',
    'email': 'john.doe@example.com',
    'groups': [
        'id': '95a326fc-32e5-4d9b-a385-1ea1257d98da'
    ]
}

性能

性能略慢于serpy,但仍然远快于marshmallowDjango REST Framework

Simple Benchmark

Complex Benchmark

注意事项

狮子也支持加载数据(序列化/打包),但目前不执行任何类型的验证。如果您将狮子作为使用类似connexion的项目的一部分,而该工具已经使用提供的OpenAPI规范文件执行了验证,这并不是什么大问题。但请注意,使用狮子加载未经验证的数据结构可能会产生一些看起来很奇怪的数据。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源代码分发

lion-0.5.0.tar.gz (7.3 kB 查看哈希)

上传时间 源代码

构建分发

lion-0.5.0-py3-none-any.whl (8.0 kB 查看哈希)

上传时间 Python 3