有没有办法在 Cerberus 中创建自定义规范化规则?
我正在使用 Cerberus 在将 Protobuf 消息存储到 MongoDB 之前对其进行规范化。我的一个用例是将子消息展平为引用:
{
"team": {"id": {"value": "<some-id>"}, "random": "value"}
}
至
{
"team": {"value": "<some-id>"}
}
我的架构:
{
'team': {
'type': 'primarykey',
'coerce': 'primarykey',
'data_relation': {'schema': 0, 'field': 'id'},
'required': True,
'permanent': True,
}
}
我的 'primarykey' 强制器需要第二种格式,以便它可以转换值。如果我事先不规范化,就不可能知道哪个键是引用,因为所有强制函数获取的都是值。
理想情况下,我会data_relation
在调用强制器之前运行一个自定义规范化函数。例如_normalize_data_relation
。
编辑:
def _normalize_coerce_data_relation(self, value):
# value is {"id": {"value": "<some-id>"}, "random": "value"}
# however I do not know the value of the `field` key in
# the data_relation rule since the only thing passed in
# is the value itself.
我不知道架构中的 data_relation 是否设置为field: id
or field: random
,因此我不知道如何规范化。
理想情况下,我想要的是类似于验证规则的东西,我也可以在其中获得模式的值:
def _normalize_data_relation(self, relation, field, value):
print(relation['field']) # 'id'
return value[relation['field']]