有没有办法在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,
}
}
我的主要关键词&#39;期望第二种格式,以便它可以转换价值。如果我事先没有规范化,就不可能知道哪个键是引用,因为所有的coercer函数都是值。
理想情况下,我会在调用coercer之前为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
还是field: random
,因此我不知道如何规范化。
理想情况下,我想要的是类似于验证规则的内容,我也可以获得模式的值:
def _normalize_data_relation(self, relation, field, value):
print(relation['field']) # 'id'
return value[relation['field']]
答案 0 :(得分:0)
我不确定我的问题是否正确,但可能有助于您指出,您可以定义coercer chain:
schema = {
'team': {'coerce': ('data_relation', 'primarykey')}
}
鉴于您的验证器实现了_normalize_coerce_data_relation
方法。