0

我一直在尝试使用 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个。

有人告诉我使用Exclusiveand Inclusive,但我对 voluptuous 的工作原理感到非常困惑。

我怎样才能让它像我想要的那样工作?

4

1 回答 1

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)
于 2017-02-03T18:25:30.217 回答