def parse_multi_click_timing_str(value): if not isinstance(value, string_types): return value parts = value.lower().split(' ') if len(parts) != 5: raise vol.Invalid( "Multi click timing grammar consists of exactly 5 words, not {}" "".format(len(parts))) try: state = cv.boolean(parts[0]) except vol.Invalid: raise vol.Invalid( u"First word must either be ON or OFF, not {}".format(parts[0])) if parts[1] != 'for': raise vol.Invalid(u"Second word must be 'for', got {}".format( parts[1])) if parts[2] == 'at': if parts[3] == 'least': key = CONF_MIN_LENGTH elif parts[3] == 'most': key = CONF_MAX_LENGTH else: raise vol.Invalid( u"Third word after at must either be 'least' or 'most', got {}" u"".format(parts[3])) try: length = cv.positive_time_period_milliseconds(parts[4]) except vol.Invalid as err: raise vol.Invalid( u"Multi Click Grammar Parsing length failed: {}".format(err)) return {CONF_STATE: state, key: str(length)} if parts[3] != 'to': raise vol.Invalid("Multi click grammar: 4th word must be 'to'") try: min_length = cv.positive_time_period_milliseconds(parts[2]) except vol.Invalid as err: raise vol.Invalid( u"Multi Click Grammar Parsing minimum length failed: {}".format( err)) try: max_length = cv.positive_time_period_milliseconds(parts[4]) except vol.Invalid as err: raise vol.Invalid( u"Multi Click Grammar Parsing minimum length failed: {}".format( err)) return { CONF_STATE: state, CONF_MIN_LENGTH: str(min_length), CONF_MAX_LENGTH: str(max_length) }
def parse_multi_click_timing_str(value): if not isinstance(value, str): return value parts = value.lower().split(" ") if len(parts) != 5: raise cv.Invalid( f"Multi click timing grammar consists of exactly 5 words, not {len(parts)}" ) try: state = cv.boolean(parts[0]) except cv.Invalid: # pylint: disable=raise-missing-from raise cv.Invalid( f"First word must either be ON or OFF, not {parts[0]}") if parts[1] != "for": raise cv.Invalid(f"Second word must be 'for', got {parts[1]}") if parts[2] == "at": if parts[3] == "least": key = CONF_MIN_LENGTH elif parts[3] == "most": key = CONF_MAX_LENGTH else: raise cv.Invalid( f"Third word after at must either be 'least' or 'most', got {parts[3]}" ) try: length = cv.positive_time_period_milliseconds(parts[4]) except cv.Invalid as err: raise cv.Invalid( f"Multi Click Grammar Parsing length failed: {err}") return {CONF_STATE: state, key: str(length)} if parts[3] != "to": raise cv.Invalid("Multi click grammar: 4th word must be 'to'") try: min_length = cv.positive_time_period_milliseconds(parts[2]) except cv.Invalid as err: raise cv.Invalid( f"Multi Click Grammar Parsing minimum length failed: {err}") try: max_length = cv.positive_time_period_milliseconds(parts[4]) except cv.Invalid as err: raise cv.Invalid( f"Multi Click Grammar Parsing minimum length failed: {err}") return { CONF_STATE: state, CONF_MIN_LENGTH: str(min_length), CONF_MAX_LENGTH: str(max_length), }
def validate_update_interval(value): value = cv.positive_time_period_milliseconds(value) if value == cv.time_period("0s"): return value if value < cv.time_period("30s"): raise cv.Invalid( "Update interval must be greater than or equal to 30 seconds if set." ) return value
def validate_integration_time(value): value = cv.positive_time_period_milliseconds(value).total_milliseconds return cv.enum(INTEGRATION_TIMES, int=True)(value)
def validate_integration_time(value): value = cv.positive_time_period_milliseconds(value).total_milliseconds if value not in INTEGRATION_TIMES: raise vol.Invalid(u"Unsupported integration time {}.".format(value)) return value
def report_interval(value): if value == "never": return 4294967295 # uint32_t max return cv.positive_time_period_milliseconds(value)