[core] Fix !include vars not being substituted in !lambda values (#16320)

Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: J. Nick Koston <nick@home-assistant.io>
This commit is contained in:
Dmitrii Kuminov
2026-05-12 20:41:30 -07:00
committed by GitHub
parent 480c23012c
commit 65ea29b44a
2 changed files with 21 additions and 1 deletions

View File

@@ -818,3 +818,23 @@ def test_resolve_include_error_no_expanded_from_for_literal_filename(
substitutions.resolve_include(include, [], substitutions.ContextVars())
assert "expanded from" not in str(exc_info.value)
def test_include_vars_applied_to_lambda_value(tmp_path: Path) -> None:
"""!include vars: must substitute into a top-level !lambda value in the included file.
Regression test for the case where the included file's root is a Lambda;
add_context() previously only tagged dict/list/str, so the include's vars
never reached the substitution pass for Lambda content.
"""
included = tmp_path / "lambda.yaml"
included.write_text('!lambda |-\n return "${foo}";\n')
include = yaml_util.IncludeFile(
tmp_path / "main.yaml", "lambda.yaml", {"foo": "bar"}, yaml_util.load_yaml
)
config = OrderedDict({"value": include.load()})
result = substitutions.do_substitution_pass(config)
assert isinstance(result["value"], Lambda)
assert result["value"].value == 'return "bar";'