Skip to main content

快速灵活的对象映射(序列化、编组)

项目描述

狮子

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

简单基准

复杂基准

注意事项

Lion 还支持加载(序列化/编组)数据,但目前不执行任何类型的验证。如果在项目中使用 Lion 作为项目的一部分,这并不是什么大不了的事情,该项目使用了 connexion 之类的东西,而connexion已经使用提供的 OpenAPI 规范文件执行了验证。请注意,使用 Lion 加载未经验证的数据结构可能会导致看起来有些奇怪的数据。

下载文件

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

源分布

lion-0.4.1.tar.gz (7.9 kB 查看哈希

已上传 source

内置分布

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

已上传 py3