mirror of
https://github.com/esphome/esphome.git
synced 2025-10-28 05:33:53 +00:00
46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
import re
|
|
|
|
import esphome.codegen as cg
|
|
import esphome.config_validation as cv
|
|
from esphome.const import __version__
|
|
from esphome.cpp_generator import MockObj
|
|
from esphome.types import ConfigType
|
|
|
|
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: MockObj, config: ConfigType, component: str):
|
|
if next_url := config.get(CONF_NEXT_URL):
|
|
cg.add(var.set_next_url(_process_next_url(next_url)))
|
|
cg.add_define(f"USE_{component.upper()}_NEXT_URL")
|
|
|
|
cg.add_library("improv/Improv", "1.2.4")
|