2014-11-21 41 views
0

我實現了最近承諾的'dependencies': {'attr': 'val'}支持,但它不適用於我的用例。這是我想要做什麼:Eve架構中的條件必填字段

schema = { 
    'attr1': {'type': 'string', 'required': True, 'allowed': ['Foo', 'Bar']}, 
    'attr2': {'type': 'integer', 'required': True, 'default': 1, 
       'dependencies': {'attr1': 'Foo'}} 
} 

object = { 
    'attr1': 'Bar' 
} 

發帖時object到端點與schema,它失敗"attr2": "field 'type' is required with values: Foo"。我想它只會失敗,如果我的依賴關係字典attr1: 'Foo'

我認爲Eve可能會填充attr2,默認值爲1,這就是爲什麼它會拋出這個錯誤,但我不確定。

回答

1

我只是想這對Cerberus的0.8-dev的:

from cerberus import Validator 

schema = { 
    'attr1': {'type': 'string', 'required': True, 'allowed': ['Foo', 'Bar']}, 
    'attr2': {'type': 'integer', 'required': True, 'dependencies': {'attr1': 'Foo'}} 
} 

object = { 
    'attr1': 'Bar' 
} 

v = Validator(schema) 
v.validate(object) 
True 

然後我嘗試:

object = { 
    'attr1': 'Bar', 
    'attr2': 1 
} 

v.validate(object) 
False 

v.errors 
{'attr2': "field 'attr1' is required with values: Foo"} 

object = { 
    'attr1': 'Foo', 
    'attr2': 1 
} 

v.validate(object) 
True 

確保你在V0.8不過,這不會對工作0.7 .2這是PyPI當前發佈的版本(這也意味着,除非Cerberus 0.8發佈並且Eve 0.5更新其Cerberus要求,否則這將在夏季無法使用)。

+0

用更多的例子編輯 – 2014-11-21 15:55:19

+0

啊,在創建一個簡單的例子的過程中,我忽略了一個細節:在attr2上設置''default':1'。我已更新我的示例。當你運行這個(與夏娃),你會看到錯誤。問題似乎是,即使某個屬性的依賴關係未得到滿足,也會填充默認值,並且驗證器會對此進行投訴。在填充默認值之前不應該檢查依賴關係嗎? – pmdarrow 2014-11-22 04:13:18