快速灵活的对象映射(序列化、编组)
项目描述
狮子
Lion 是一个非常灵活且快速的库,用于将对象映射到字典。它使用声明式 API 并支持类似于 GraphQL 的查询语言。与其他序列化库不同,它还允许跳过整个字段而不是null在字典中有值。
它的灵感来自serpy、marshmallow、 Django REST Framework和Kim等库。
例子
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 稍慢,但仍远远领先于marshmallow和Django REST Framework。
注意事项
Lion 还支持加载(序列化/编组)数据,但目前不执行任何类型的验证。如果在项目中使用 Lion 作为项目的一部分,这并不是什么大不了的事情,该项目使用了 connexion 之类的东西,而connexion已经使用提供的 OpenAPI 规范文件执行了验证。请注意,使用 Lion 加载未经验证的数据结构可能会导致看起来有些奇怪的数据。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
lion-0.4.1.tar.gz
(7.9 kB
查看哈希)
内置分布
lion-0.4.1-py3-none-any.whl
(8.0 kB
查看哈希)