From 25f3ab364027aa3040f764d36598ea7b1f226326 Mon Sep 17 00:00:00 2001 From: Petro31 <35082313+Petro31@users.noreply.github.com> Date: Mon, 26 May 2025 04:16:56 -0700 Subject: [PATCH] Add from_hex filter (#145229) --- homeassistant/helpers/template.py | 6 ++++++ tests/helpers/test_template.py | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/homeassistant/helpers/template.py b/homeassistant/helpers/template.py index cb6d8fe81b8..1061ac732d6 100644 --- a/homeassistant/helpers/template.py +++ b/homeassistant/helpers/template.py @@ -2572,6 +2572,11 @@ def struct_unpack(value: bytes, format_string: str, offset: int = 0) -> Any | No return None +def from_hex(value: str) -> bytes: + """Perform hex string decode.""" + return bytes.fromhex(value) + + def base64_encode(value: str) -> str: """Perform base64 encode.""" return base64.b64encode(value.encode("utf-8")).decode("utf-8") @@ -3131,6 +3136,7 @@ class TemplateEnvironment(ImmutableSandboxedEnvironment): self.filters["flatten"] = flatten self.filters["float"] = forgiving_float_filter self.filters["from_json"] = from_json + self.filters["from_hex"] = from_hex self.filters["iif"] = iif self.filters["int"] = forgiving_int_filter self.filters["intersect"] = intersect diff --git a/tests/helpers/test_template.py b/tests/helpers/test_template.py index 4de8d47cc16..0b95010b71b 100644 --- a/tests/helpers/test_template.py +++ b/tests/helpers/test_template.py @@ -1632,6 +1632,14 @@ def test_ord(hass: HomeAssistant) -> None: assert template.Template('{{ "d" | ord }}', hass).async_render() == 100 +def test_from_hex(hass: HomeAssistant) -> None: + """Test the fromhex filter.""" + assert ( + template.Template("{{ '0F010003' | from_hex }}", hass).async_render() + == b"\x0f\x01\x00\x03" + ) + + def test_base64_encode(hass: HomeAssistant) -> None: """Test the base64_encode filter.""" assert (