Cerberus依赖关系如何引用文档中较高的字段?

丹·克雷格

我正在尝试为具有依赖关系的文档创建架构,这些依赖关系引用文档中较高的字段。例如:

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”下寻找“ packages”。有什么办法可以提升文档树?还是要参考文档的根目录?

尼卡金

描述的问题在版本1.0.2中得到解决:

处理子文档后,将在该文档的级别开始对相关字段的查找。为了将处理后的文档作为根级别访问,声明必须以^开头。两个初始插入符号(^^)的出现被解释为原义的单个^,没有特殊含义。

示例代码:

import cerberus

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'
            }
        }
    }
}

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

validator = cerberus.Validator(schema)
print(validator.validate(document))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过引用中的字段查找文档?

在COM IDL中如何从COM依赖关系引用枚举?

如何在Qt QBS中引用外部库依赖关系?

使用Cerberus进行依赖关系验证

如何在查询中引用文档的字段值?

打字稿:如何在本文档中引用另一个文档的字段?

如何从 IntelliJ 中的“依赖关系图”中“排除依赖关系”

使用Cerberus根据条件进行依赖关系验证

如何通过使用引用第二个单词文档的字段将图像包含在单词文档中,而该字段又包含引用图像的字段?

使用Firestore,如何使用Java类序列化文档中的引用类型字段?

如何从Eclipse中刷新Maven依赖关系?

如何解决或修复Django循环模型字段依赖关系?

使用 Factoryboy 的模型中字段之间的依赖关系

如何删除项目引用中的循环依赖

Django模型中的多个自引用的ForeignKey关系字段

当依赖关系树中存在两个或多个依赖关系版本时,Maven如何选择传递依赖关系的版本?

在与Jest的依赖关系中模拟依赖关系?

如何在文档内的数组中获取文档引用

如何从OneToOne关系中获取特定字段?

如何更新 DjangoRestFramework 中的关系字段

如何使文档中的字段唯一?

如何更新mongodb中的文档字段?

如何访问mongo文档中的字段

如何从MongoDB文档中完全删除字段?

如何从数组中的文档投影特定字段?

如何在Firestore文档的字段中搜索

如何获取Firestore文档中的字段?

Flutter:如何限制文档中的字段数

如何显示 Firestore 文档中的某些字段