6

ドキュメントの上位のフィールドを参照する依存関係を持つドキュメントのスキーマを作成しようとしています。例えば:

document = {
    'packages': {
        'some-package': {'version': 1}
    },
    'build-steps': {
        'needs-some-package': {'foo': 'bar'},
        'other-thing': {'funky': 'stuff'}
    }
}

ここで苦労しているのは、build-steps.needs-some-package と packages.some-package の間の依存関係を強化することです。ビルドステップに「needs-some-package」が含まれる場合は常に、パッケージに「some-package」が含まれている必要があります。

「needs-some-package」が存在しない場合、「some-package」は不要です。したがって、このドキュメントも検証する必要があります。

other_document = {
    'packages': {
        'other-package': {'version': 1}
    },
    'build-steps': {
        'other-thing': {'funky': 'stuff'}
    }
}

適切な場所のように見える依存関係を持つスキーマは

schema = {
    'packages': {
        'type': 'dict',
        'valueschema': {
            'type': 'dict'
        }
    },
    'build-steps': {
        'type': 'dict',
        'schema': {
            'needs-some-package': {
                'type': 'dict',
                'dependencies': 'packages.some-package'
            },
            'other-thing': {
                'type': 'dict'
            }
        }
    }
}

しかし、Cerberus が「build-steps」の下のサブドキュメント内で「パッケージ」を探しているように見えるため、これは機能しません。ドキュメント ツリーを上に移動する方法はありますか? または、ドキュメントのルートに関して何かを参照するには?

4

1 に答える 1