Python结构的声明性反序列化
项目描述
由于使用colander时的挫败感,我决定创建类似的东西...
Objective是一个具有以下功能的反序列化工具
目标的声明性定义。
如何定义某事物不会产生混淆,它始终是一样的。
通过继承重用定义。
可选验证。
使覆盖某些部分变得简单。
用法
简单的映射和验证
import objective
import datetime
now = datetime.datetime(2001, 9, 11)
class UserObjective(objective.Mapping):
name = objective.Item(objective.Unicode, missing=objective.Ignore)
email = objective.Item(objective.Unicode, validator=objective.Email())
password = objective.Item(objective.Unicode)
since = objective.Item(objective.UtcDateTime, missing=now)
serialized = {
'email': 'foo@example.com',
'password': 'foobar'
}
deserialized = UserObjective.deserialize(serialized)
assert deserialized == {
'password': u'foobar',
'email': u'foo@example.com',
'since': datetime.datetime(2001, 9, 11, 0, 0)
}
bad_serialized = {
'name': 'foobar'
}
try:
deserialized = UserObjective().deserialize(bad_serialized)
except objective.Invalid as e:
assert isinstance(e, objective.exc.InvalidChildren)
assert {(x.node.__name__, x.__class__, x.value) for x in e.children} == {
('password', objective.exc.MissingValue, objective.values.Undefined),
('email', objective.exc.InvalidValue, 'baz')
}
映射复杂结构
import objective
class ProductRequestObjective(objective.BunchMapping):
@objective.Item()
class body(objective.Mapping):
name = objective.Item(objective.Unicode)
root = objective.Item(objective.Unicode)
@objective.Item()
class semantics(objective.List):
items = objective.Item(objective.Unicode)
@objective.Item()
class match(objective.Mapping):
_id = objective.Item(objective.Field)
问题、想法、建议
objective还远未完善。我能够想象出许多可能的验证器。
我尽力测试了(主要是时间上)。
如果您发现错误或您有一个好主意,我完全愿意实现它。
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码发行版
此版本没有可用的源代码发行版文件。请参阅生成发行版存档的教程。
构建发行版
objective-0.0.13-py2.py3-none-any.whl (10.2 kB 查看散列值)