Add a `contains` jinja filter and test (#86390)

pull/86761/head
Vaarlion 2023-01-25 11:51:47 +01:00 committed by GitHub
parent f327a247a0
commit 3007e0259d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 1 deletions

View File

@ -13,7 +13,7 @@ from functools import cache, lru_cache, partial, wraps
import json
import logging
import math
from operator import attrgetter
from operator import attrgetter, contains
import random
import re
import statistics
@ -2085,6 +2085,7 @@ class TemplateEnvironment(ImmutableSandboxedEnvironment):
self.filters["iif"] = iif
self.filters["bool"] = forgiving_boolean
self.filters["version"] = version
self.filters["contains"] = contains
self.globals["log"] = logarithm
self.globals["sin"] = sine
self.globals["cos"] = cosine
@ -2121,6 +2122,7 @@ class TemplateEnvironment(ImmutableSandboxedEnvironment):
self.tests["is_number"] = is_number
self.tests["match"] = regex_match
self.tests["search"] = regex_search
self.tests["contains"] = contains
if hass is None:
return

View File

@ -4070,3 +4070,33 @@ async def test_template_states_can_serialize(hass: HomeAssistant) -> None:
template_state = template.TemplateState(hass, state, True)
assert template_state.as_dict() is template_state.as_dict()
assert json_dumps(template_state) == json_dumps(template_state)
@pytest.mark.parametrize(
"seq, value, expected",
[
([0], 0, True),
([1], 0, False),
([False], 0, True),
([True], 0, False),
([0], [0], False),
(["toto", 1], "toto", True),
(["toto", 1], "tata", False),
([], 0, False),
([], None, False),
],
)
def test_contains(hass, seq, value, expected):
"""Test contains."""
assert (
template.Template("{{ seq | contains(value) }}", hass).async_render(
{"seq": seq, "value": value}
)
== expected
)
assert (
template.Template("{{ seq is contains(value) }}", hass).async_render(
{"seq": seq, "value": value}
)
== expected
)