cogito/esphome_dev/esphome/components/improv_base/__init__.py

41 lines
1 KiB
Python

import re
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.const import __version__
CODEOWNERS = ["@esphome/core"]
CONF_NEXT_URL = "next_url"
VALID_SUBSTITUTIONS = ["esphome_version", "ip_address", "device_name"]
def validate_next_url(value):
value = cv.url(value)
test = r"{{(?!" + r"\b|".join(VALID_SUBSTITUTIONS) + r"\b)(\w+)}}"
result = re.search(test, value)
if result:
raise cv.Invalid(
f"Invalid substitution(s) ({', '.join(result.groups())}) in next_url. Valid substitutions are: {', '.join(VALID_SUBSTITUTIONS)}"
)
return value
IMPROV_SCHEMA = cv.Schema(
{
cv.Optional(CONF_NEXT_URL): validate_next_url,
}
)
def _process_next_url(url: str):
if "{{esphome_version}}" in url:
url = url.replace("{{esphome_version}}", __version__)
return url
async def setup_improv_core(var, config):
if CONF_NEXT_URL in config:
cg.add(var.set_next_url(_process_next_url(config[CONF_NEXT_URL])))
cg.add_library("improv/Improv", "1.2.4")