cerberus:オプションのフィールドが少なくとも1回発生することを検証します

zlipp

データの検証にケルベロスを使用しています。私のフィールドの1つはオプションです-すべてのアイテムに存在する必要はありません。ただし、キーはデータ配列全体で少なくとも1回は入力する必要があります。

例として、キー'c'がデータリストの少なくとも1つの辞書にあることを検証したいとします。

from cerberus import Validator

has_c = {'data': [{'a': 1, 'b': 2}, {'b': 2}, {'c': 3}]}
no_c = {'data': [{'a': 1, 'b': 2}, {'a': 1}]}

schema = {'data':
          {'type': 'list',
           'schema': {
               'type': 'dict',
               'schema': {
                   'a': {'required': True},
                   'b': {'required': True},
                   'c': {'required': False, 'at_least_one': True}
               }
           }
           }
          }

class MyValidator(Validator) # Some fancy code...
....

v = MyValidator()

v.validate(has_c, schema) # Passes
v.validate(no_c, schema) # Fails

これはケルベロスの外でも実行できるようですが、可能であれば、メソッドをバリデーターに保持したいと思います。

フレキシブル

メソッドをValidatorサブクラスに含める場合は、考えていたとおりにカスタムルールを作成する必要があります。

from cerberus import Validator

test_with_c = {'data': [{'a': 1, 'b': 2}, {'b': 2}, {'c': 3}]}
test_with_no_c = {'data': [{'a': 1, 'b': 2}, {'a': 1}]}

class MyValidator(Validator):
    def _validate_has_c(self, has_c, field, value):
        seen_c = False
        for v in value:
            if "c" in v:
                seen_c = True
        if has_c and not seen_c:
            self._error(field, "Must contain a 'c' key")

schema = {
    "data": {
        "type": "list",
        "has_c": True
    }
}

v = MyValidator(schema)

print(v(test_with_c), v.errors)
print(v(test_with_no_c), v.errors)

これを実行するとc、要素の1つでキーを探すことに関して必要な結果が得られますそのコードを実行すると、

True {}
False {'data': ["Must contain a 'c' key"]}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Hibernate検証アノテーション-少なくとも1つのフィールドがnullでないことを検証します

分類Dev

入力する少なくとも1つのフィールド、重力フォームを検証します

分類Dev

Ruby onRailsのフォームに少なくとも1つのフィールドが存在することを検証する方法

分類Dev

フォームを検証して、グループ内で少なくとも1つのラジオボタンがチェックされていることを確認します

分類Dev

Systemverilogアサーションシグナルは、シミュレーション中に少なくとも1回発生すると真になります

分類Dev

リレーションシップにRSpecに少なくとも1つのエントリがあることを検証していることをテストするにはどうすればよいですか?

分類Dev

300aa以上のfastaファイルでシーケンスを選択し、「C」が少なくとも4回発生する

分類Dev

2つのフィールドのうち少なくとも1つは検証を完了する必要があります

分類Dev

dtoスプリングブートの3つのフィールドのうち少なくとも1つを検証する

分類Dev

CakePHP3検証を使用して少なくとも1つのフィールドが設定されているかどうかを確認する

分類Dev

Codeigniterフォームの検証-少なくとも1つのフィールドが必要です

分類Dev

Dojo データグリッドに少なくとも 1 つの行があることを検証する

分類Dev

これを検証する方法。javascriptまたはjqueryを使用して投稿する前に、少なくとも2つのオプションを選択する必要があります。

分類Dev

少なくとも1つのオプションを使用してコマンドを作成する方法

分類Dev

HTMLの少なくとも1つの入力フィールドを検証するためにどのように確立できますか?

分類Dev

Ajaxを介してdjangohtmlテンプレートで少なくとも1つのチェックボックスがオンになっていることを検証します

分類Dev

Laravel「少なくとも1つ」フィールドの検証が必要

分類Dev

フォームフィールドで少なくとも1つの値が変更されるまで検証が機能しない状態でフォームを更新します-Angular-ReactiveForms

分類Dev

Java Spring Bootアプリケーション:名前付きのBeanの作成中にエラーが発生しました。この依存関係の自動配線候補として適格なBeanが少なくとも1つ必要です。

分類Dev

ユーザーが検索する3つのフィールドのうち少なくとも1つに入力するようにします

分類Dev

MS Access:条件が少なくとも1回発生した場合は、すべてのレコードを削除します

分類Dev

相互検証を使用する場合、各フォールドに真のクラスのインスタンスが少なくともいくつか含まれていることを確認する方法はありますか?

分類Dev

オプション--plugin-pathは、VLCのPythonバインディングを使用するときにエラーが発生しなくなりました

分類Dev

オプション--plugin-pathは、VLCのPythonバインディングを使用するときにエラーが発生しなくなりました

分類Dev

pandas-groupbyにnull以外の値を含む列が少なくとも1つあるグループをフィルタリングします

分類Dev

リアクティブフォームを使用してAngular7で「少なくとも1つのフィールドに入力する必要がある」検証を設定するにはどうすればよいですか?

分類Dev

ノードが少なくとも特定のカーネルバージョンを実行していることを確認しますか?

分類Dev

少なくとも1つのフィールドに値が入力されている場合は、送信ボタンを有効にします

分類Dev

チェックボックスの検証-少なくとも1つが選択されていることを検証します

Related 関連記事

  1. 1

    Hibernate検証アノテーション-少なくとも1つのフィールドがnullでないことを検証します

  2. 2

    入力する少なくとも1つのフィールド、重力フォームを検証します

  3. 3

    Ruby onRailsのフォームに少なくとも1つのフィールドが存在することを検証する方法

  4. 4

    フォームを検証して、グループ内で少なくとも1つのラジオボタンがチェックされていることを確認します

  5. 5

    Systemverilogアサーションシグナルは、シミュレーション中に少なくとも1回発生すると真になります

  6. 6

    リレーションシップにRSpecに少なくとも1つのエントリがあることを検証していることをテストするにはどうすればよいですか?

  7. 7

    300aa以上のfastaファイルでシーケンスを選択し、「C」が少なくとも4回発生する

  8. 8

    2つのフィールドのうち少なくとも1つは検証を完了する必要があります

  9. 9

    dtoスプリングブートの3つのフィールドのうち少なくとも1つを検証する

  10. 10

    CakePHP3検証を使用して少なくとも1つのフィールドが設定されているかどうかを確認する

  11. 11

    Codeigniterフォームの検証-少なくとも1つのフィールドが必要です

  12. 12

    Dojo データグリッドに少なくとも 1 つの行があることを検証する

  13. 13

    これを検証する方法。javascriptまたはjqueryを使用して投稿する前に、少なくとも2つのオプションを選択する必要があります。

  14. 14

    少なくとも1つのオプションを使用してコマンドを作成する方法

  15. 15

    HTMLの少なくとも1つの入力フィールドを検証するためにどのように確立できますか?

  16. 16

    Ajaxを介してdjangohtmlテンプレートで少なくとも1つのチェックボックスがオンになっていることを検証します

  17. 17

    Laravel「少なくとも1つ」フィールドの検証が必要

  18. 18

    フォームフィールドで少なくとも1つの値が変更されるまで検証が機能しない状態でフォームを更新します-Angular-ReactiveForms

  19. 19

    Java Spring Bootアプリケーション:名前付きのBeanの作成中にエラーが発生しました。この依存関係の自動配線候補として適格なBeanが少なくとも1つ必要です。

  20. 20

    ユーザーが検索する3つのフィールドのうち少なくとも1つに入力するようにします

  21. 21

    MS Access:条件が少なくとも1回発生した場合は、すべてのレコードを削除します

  22. 22

    相互検証を使用する場合、各フォールドに真のクラスのインスタンスが少なくともいくつか含まれていることを確認する方法はありますか?

  23. 23

    オプション--plugin-pathは、VLCのPythonバインディングを使用するときにエラーが発生しなくなりました

  24. 24

    オプション--plugin-pathは、VLCのPythonバインディングを使用するときにエラーが発生しなくなりました

  25. 25

    pandas-groupbyにnull以外の値を含む列が少なくとも1つあるグループをフィルタリングします

  26. 26

    リアクティブフォームを使用してAngular7で「少なくとも1つのフィールドに入力する必要がある」検証を設定するにはどうすればよいですか?

  27. 27

    ノードが少なくとも特定のカーネルバージョンを実行していることを確認しますか?

  28. 28

    少なくとも1つのフィールドに値が入力されている場合は、送信ボタンを有効にします

  29. 29

    チェックボックスの検証-少なくとも1つが選択されていることを検証します

ホットタグ

アーカイブ