我一直试图使用python库voluptuous几个小时,但我无法做出我想要的东西。
现在正在发挥作用:
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_ENTITY_ID): cv.entity_id,
vol.Required(CONF_STATE): cv.slug,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
vol.Optional(CONF_START, default=None): cv.template,
vol.Optional(CONF_END, default=None): cv.template,
vol.Optional(CONF_DURATION, default=None): cv.template,
})
但我想添加另一个约束:我希望提供正好2 的[CONF_START, CONF_END, CONF_DURATION]
。不多于,不少于2.
我被告知要使用Exclusive
和Inclusive
,但我真的很困惑有多么性感。
我怎样才能让它像我想的那样工作?
答案 0 :(得分:0)
最后,有人给了我解决方案
我需要将我的验证放到一个单独的函数中,并使用vol.All
将我的第一个模式与函数连接起来:
def exactly_two_period_keys(conf):
provided = 0
for param in [CONF_START, CONF_END, CONF_DURATION]:
if param in conf and conf[param] is not None:
provided += 1
if provided != 2:
raise vol.Invalid('Error message here')
return conf
PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend({
vol.Required(CONF_ENTITY_ID): cv.entity_id,
vol.Required(CONF_STATE): cv.slug,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
vol.Optional(CONF_START, default=None): cv.template,
vol.Optional(CONF_END, default=None): cv.template,
vol.Optional(CONF_DURATION, default=None): cv.template,
}), exactly_two_period_keys)