0

Python パッケージcerberusを使用してペイロードを検証します。これが私の問題です。

別のスキーマのフィールドに正確な値がある場合にのみ、フィールドを必須に設定する必要があります。何かのようなもの:

    "key2": {
      "type": "string",
      "required": \\\ true if dict1.key1 == 'valueX' else false \\\
    }

したがって、私のスキーマは次のようになります。

"dict1": {
  "type": "dict",
  "schema": {
    "key1": {
      "type": "string",
      "required": true
    }
  }
},
"dict2": {
  "type": "dict",
  "schema": {
    "key2": {
      "type": "string",
      "required": \\\ true if dict1.key1 == 'valueX' else false \\\
    }
  }
}

誰かがそれを達成する方法を知っていますか? ありがとうございました

4

3 に答える 3

-1

ほとんどの場合、ライブラリのドキュメントで解決策を見つけることができます。
探しているものは「依存関係」の下

にあります。Cerberus ドキュメントへのリンクと対応するセクションは、
https ://docs.python-cerberus.org/en/stable/validation-rules.html#dependencies にあります。

ドキュメントには次のように書かれています。


マッピングが提供される場合、すべての依存関係が存在する必要があるだけでなく、許可された値のいずれかが一致する必要があります。


ドット表記を使用したサブドキュメント フィールドへの依存関係の宣言もサポートされています。


あなたの例では、要件が値にバインドされている場合、その値は「許可された」ルールで指定された値と一致する必要があることを意味します。

要件がスキーマにバインドされている場合は、そのスキーマとそのサブスキーマをドット表記で指定できます。

あなたのために働くはずの解決策は次のようになります:

"dict1": {
    "type": "dict",
    "schema": {
        "key1": {
            "type": "string",
            "required": True,
            "allowed": ["valueX"]
        }
    }
},
"dict2": {
    "type": "dict",
    "schema": {
        "key2": {  # required if dependency matches
            "type": "string",
            "dependencies": {
                "dict1.key1": ["valueX"]
            }
        }
    }
}

「許可された」ルールをまったく指定しない場合にも機能するかどうかはわかりませんが、そうすべきだと思います。

于 2020-05-24T21:49:39.957 に答える