我一直在尝试使用python库几个小时,但我无法制作我想要的东西。
这是现在正在工作的方法:
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,
})
但我想添加另一个约束:我希望提供[CONF_START, CONF_END, CONF_DURATION]
中的 2 个。不多不少于2。
我被告知要使用Exclusive
和Inclusive
,但我真的很困惑性感是如何工作的。
怎样才能让它像我想要的那样工作?
终于有人给了我解决方案
我需要将我的验证放入一个单独的函数中,并使用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)