至少有一个字典验证中的关键?
Voluptuous at least one-of key in dictionary validation?
假设我想要一本至少包含三个键 foo', 'bar',
baz 中的一个的字典。以下将允许空集。
Schema({
'foo': str,
'bar': int,
'baz': bool
})
很遗憾,我不能这样做:
Any(
Schema({'foo': str}),
Schema({'bar': int}),
Schema({'baz': bool)
)
最好的方法是什么?
dictionary with at least one of the three key foo', 'bar', baz
如何实现:github voluptuous 项目中已经对此进行了描述。
解决方案(为您的示例采用):
from voluptuous import All, Any, Optional, Required, Schema
key_schema = Schema({
Required(
Any('foo', 'bar', 'baz'),
msg="Must specify at least one of ['foo', 'bar', 'baz']"): object
})
data_schema = Schema({
Optional('foo'): str,
Optional('bar'): int,
Optional('baz'): bool,
})
s = All(key_schema, data_schema)
因此,s
是您可以在代码和测试中使用的最终架构。
假设我想要一本至少包含三个键 foo', 'bar',
baz 中的一个的字典。以下将允许空集。
Schema({
'foo': str,
'bar': int,
'baz': bool
})
很遗憾,我不能这样做:
Any(
Schema({'foo': str}),
Schema({'bar': int}),
Schema({'baz': bool)
)
最好的方法是什么?
dictionary with at least one of the three key foo', 'bar',
baz
如何实现:github voluptuous 项目中已经对此进行了描述。
解决方案(为您的示例采用):
from voluptuous import All, Any, Optional, Required, Schema
key_schema = Schema({
Required(
Any('foo', 'bar', 'baz'),
msg="Must specify at least one of ['foo', 'bar', 'baz']"): object
})
data_schema = Schema({
Optional('foo'): str,
Optional('bar'): int,
Optional('baz'): bool,
})
s = All(key_schema, data_schema)
因此,s
是您可以在代码和测试中使用的最终架构。