mirror of
https://github.com/home-assistant/core.git
synced 2025-07-13 00:07:10 +00:00
Prevent template changing options (#20775)
* Prevent complex template validation changing input value * Remove deprecation warnings
This commit is contained in:
parent
e6cd04d711
commit
59393ab085
@ -436,13 +436,15 @@ def template(value):
|
||||
def template_complex(value):
|
||||
"""Validate a complex jinja2 template."""
|
||||
if isinstance(value, list):
|
||||
for idx, element in enumerate(value):
|
||||
value[idx] = template_complex(element)
|
||||
return value
|
||||
return_value = value.copy()
|
||||
for idx, element in enumerate(return_value):
|
||||
return_value[idx] = template_complex(element)
|
||||
return return_value
|
||||
if isinstance(value, dict):
|
||||
for key, element in value.items():
|
||||
value[key] = template_complex(element)
|
||||
return value
|
||||
return_value = value.copy()
|
||||
for key, element in return_value.items():
|
||||
return_value[key] = template_complex(element)
|
||||
return return_value
|
||||
|
||||
return template(value)
|
||||
|
||||
|
@ -402,8 +402,7 @@ def test_template():
|
||||
schema = vol.Schema(cv.template)
|
||||
|
||||
for value in (None, '{{ partial_print }', '{% if True %}Hello', ['test']):
|
||||
with pytest.raises(vol.Invalid,
|
||||
message='{} not considered invalid'.format(value)):
|
||||
with pytest.raises(vol.Invalid):
|
||||
schema(value)
|
||||
|
||||
options = (
|
||||
@ -433,6 +432,15 @@ def test_template_complex():
|
||||
for value in options:
|
||||
schema(value)
|
||||
|
||||
# ensure the validator didn't mutate the input
|
||||
assert options == (
|
||||
1, 'Hello',
|
||||
'{{ beer }}',
|
||||
'{% if 1 == 1 %}Hello{% else %}World{% endif %}',
|
||||
{'test': 1, 'test2': '{{ beer }}'},
|
||||
['{{ beer }}', 1]
|
||||
)
|
||||
|
||||
|
||||
def test_time_zone():
|
||||
"""Test time zone validation."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user