From 13a6c13b8939092aa07943ea82ded46cd4c6a382 Mon Sep 17 00:00:00 2001 From: Petro31 <35082313+Petro31@users.noreply.github.com> Date: Mon, 26 May 2025 04:56:11 -0700 Subject: [PATCH] Allow base64_encode to support bytes and strings (#145227) --- homeassistant/helpers/template.py | 6 ++++-- tests/helpers/test_template.py | 15 ++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/homeassistant/helpers/template.py b/homeassistant/helpers/template.py index 1061ac732d6..408e88ef8b3 100644 --- a/homeassistant/helpers/template.py +++ b/homeassistant/helpers/template.py @@ -2577,9 +2577,11 @@ def from_hex(value: str) -> bytes: return bytes.fromhex(value) -def base64_encode(value: str) -> str: +def base64_encode(value: str | bytes) -> str: """Perform base64 encode.""" - return base64.b64encode(value.encode("utf-8")).decode("utf-8") + if isinstance(value, str): + value = value.encode("utf-8") + return base64.b64encode(value).decode("utf-8") def base64_decode(value: str, encoding: str | None = "utf-8") -> str | bytes: diff --git a/tests/helpers/test_template.py b/tests/helpers/test_template.py index 0b95010b71b..6c41b7970da 100644 --- a/tests/helpers/test_template.py +++ b/tests/helpers/test_template.py @@ -1640,12 +1640,17 @@ def test_from_hex(hass: HomeAssistant) -> None: ) -def test_base64_encode(hass: HomeAssistant) -> None: +@pytest.mark.parametrize( + ("value_template", "expected"), + [ + ('{{ "homeassistant" | base64_encode }}', "aG9tZWFzc2lzdGFudA=="), + ("{{ int('0F010003', base=16) | pack('>I') | base64_encode }}", "DwEAAw=="), + ("{{ 'AA01000200150020' | from_hex | base64_encode }}", "qgEAAgAVACA="), + ], +) +def test_base64_encode(hass: HomeAssistant, value_template: str, expected: str) -> None: """Test the base64_encode filter.""" - assert ( - template.Template('{{ "homeassistant" | base64_encode }}', hass).async_render() - == "aG9tZWFzc2lzdGFudA==" - ) + assert template.Template(value_template, hass).async_render() == expected def test_base64_decode(hass: HomeAssistant) -> None: