2017-01-17 21 views
1

私はケルベロスをPythonで使用していくつかのデータを検証しようとしています。
私は、「ブール」タイプのため、バリデータは常にこのよう、Trueを返していることが分かった:ケルベロスをPythonで使用してブール値を検証する

import cerberus 
bool_schema = {'name': {'type': 'boolean', 'required': True}} 
cerberus.schema_registry.add('bool_schema', bool_schema) 

v = cerberus.Validator({'name': {'schema': 'bool_schema'}}) 
test1 = {'name': 'a'} 
test2 = {'name': 0} 
print(v.validate(test1)) 
print(v.validate(test2)) 

上記のコードは2 Truesを印刷します。
実際には、値がTrueまたはFalse(Pythonのbool型)であるかどうかを検証する必要があります。他の値はバリデーターを渡すべきではありません。

+0

あなたがcerberus' 'のどのバージョンを使用していますか?上記のコードはエラーを引き起こします( "raise SchemaError(self.schema_validator.errors) cerberus.schema.SchemaError:{'name':[{'スキーマ':[{'anyof':['定義が検証されません'、{ 'anyof definition 1':['ルールセット定義booleanが見つかりません'、 'anyof definition 0':['スキーマ定義booleanが見つかりません']}]]]]] '' cerverus' 1.0.1 – DeepSpace

+0

'cerberus'を' pip'にインストールし、 'cerberus .__ version__'が正確にバージョン1.0.1を示しています – LuCima

+0

申し訳ありませんが、私は質問に間違った記述をしました。Validatorのスキーマ名は' 'bool_schema'''は '' schema'''ではありません。 – LuCima

答えて

2

これは意味上の問題です。達成したいことを明示的に指定していませんが、辞書のnameにマップされた値がブール値であるかどうかをテストし、それが存在するかどうかをテストしたいと仮定しています。

サンプルコードの4行目では、スキーマレジストリから以前に定義されたスキーマを参照するスキーマを定義しています。検証しながら、第2レベルschemaルールのみif the value of name is a mapping処理される

{'name': 
    {'schema': { 
     {'type': 'boolean', 
     'required': True} 
}}} 

として解釈されるであろう。それぞれの例ではそうではありません。実際には規則を全く処理しないため、検証は毎回Trueを返します。

これはそれをカバーします、私は上記の仮定の質問に答えるために:

import cerberus 
required_boolean = {'type': 'boolean', 'required': True} 
cerberus.rules_set_registry.add('required_boolean', required_boolean) 
v = cerberus.Validator({'name': 'required_boolean'}) 
+0

'schema_registry'はその位置で** dict **を検証することを意味します。 – LuCima

1

スキーマレジストリに問題がある可能性があります(ticketを開設しましたので、詳しく調査してください)。一方

、レジストリをスキップすることができますし、それだけで正常に動作します:将来の読者のために

from cerberus import Validator 

schema = {'name': {'type': 'boolean', 'required': True}} 

v = Validator() 
v.validate({'name': 'a'}) 
False 

v.errors 
{'name': ['must be of boolean type']} 

はEDIT:以下ファンキー-未来@からの答えは実際にあなたのコードが失敗した理由を説明し、どのようにそれを修正する。

+0

この回答を削除する方が良いかもしれませんか? –

関連する問題