diff --git a/custom_components/hacs/utils/store.py b/custom_components/hacs/utils/store.py index f0afa07b6bf..8150b5cc948 100644 --- a/custom_components/hacs/utils/store.py +++ b/custom_components/hacs/utils/store.py @@ -1,5 +1,7 @@ -"""Storage handers.""" +"""Storage handlers.""" +from awesomeversion import AwesomeVersion +from homeassistant.const import __version__ as HAVERSION from homeassistant.helpers.json import JSONEncoder from homeassistant.helpers.storage import Store from homeassistant.util import json as json_util @@ -8,6 +10,10 @@ from ..exceptions import HacsException from .logger import LOGGER +# serialize_in_event_loop=False is only available in HA 2025.12.0+ +# See: https://developers.home-assistant.io/blog/2025/11/25/storage-helper-opt-in-serialize-in-executor/ +_SERIALIZE_IN_EVENT_LOOP_SUPPORTED = AwesomeVersion(HAVERSION) >= "2025.12.0" + _LOGGER = LOGGER @@ -39,7 +45,10 @@ def get_store_key(key): def _get_store_for_key(hass, key, encoder): """Create a Store object for the key.""" - return HACSStore(hass, VERSION_STORAGE, get_store_key(key), encoder=encoder, atomic_writes=True) + kwargs = {"encoder": encoder, "atomic_writes": True} + if _SERIALIZE_IN_EVENT_LOOP_SUPPORTED: + kwargs["serialize_in_event_loop"] = False + return HACSStore(hass, VERSION_STORAGE, get_store_key(key), **kwargs) def get_store_for_key(hass, key): diff --git a/tests/utils/test_store.py b/tests/utils/test_store.py index a0a3b9adb4b..ee69e5f734d 100644 --- a/tests/utils/test_store.py +++ b/tests/utils/test_store.py @@ -64,3 +64,24 @@ async def test_store_store(hass: HomeAssistant, caplog: pytest.LogCaptureFixture await async_save_to_store(hass, "test", {"test": "test"}) assert async_save_mock.call_count == 1 + + +@pytest.mark.parametrize( + "ha_version, expected_supported", + [ + ("2025.11.0", False), + ("2025.12.0", True), + ], +) +def test_serialize_in_event_loop_version_check(ha_version: str, expected_supported: bool) -> None: + """Test that serialize_in_event_loop flag is set based on HA version.""" + from awesomeversion import AwesomeVersion + + with patch( + "custom_components.hacs.utils.store._SERIALIZE_IN_EVENT_LOOP_SUPPORTED", + AwesomeVersion(ha_version) >= "2025.12.0", + ): + # Re-import to get the patched value + import custom_components.hacs.utils.store as store_module + + assert expected_supported == store_module._SERIALIZE_IN_EVENT_LOOP_SUPPORTED