22from pathlib import Path
33from typing import Any
44
5- import voluptuous as vol # type: ignore[import-untyped]
5+ import voluptuous as vol
66from homeassistant .config_entries import ConfigEntry
77from homeassistant .const import CONF_EMAIL , CONF_PASSWORD
88from homeassistant .helpers import config_validation as cv , aiohttp_client
9- from homeassistant .core import HomeAssistant
9+ from homeassistant .core import HomeAssistant , Callable
1010from homeassistant .helpers .update_coordinator import DataUpdateCoordinator
1111from pyhon import Hon
1212
2727)
2828
2929
30+ def make_threadsafe_callback (
31+ hass : HomeAssistant , callback : Callable [..., None ]
32+ ) -> Callable [..., None ]:
33+ """Wrap a callback so it's always called inside the event loop thread."""
34+
35+ def wrapper (* args : Any , ** kwargs : Any ) -> None :
36+ hass .loop .call_soon_threadsafe (callback , * args , ** kwargs )
37+
38+ return wrapper
39+
3040async def async_setup_entry (hass : HomeAssistant , entry : ConfigEntry ) -> bool :
3141 session = aiohttp_client .async_get_clientsession (hass )
3242 if (config_dir := hass .config .config_dir ) is None :
@@ -48,10 +58,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
4858 coordinator : DataUpdateCoordinator [dict [str , Any ]] = DataUpdateCoordinator (
4959 hass , _LOGGER , name = DOMAIN
5060 )
51- def make_threadsafe_callback (hass , callback ):
52- def wrapper (* args , ** kwargs ):
53- hass .loop .call_soon_threadsafe (callback , * args , ** kwargs )
54- return wrapper
61+
5562 hon .subscribe_updates (make_threadsafe_callback (hass , coordinator .async_set_updated_data ))
5663
5764 hass .data .setdefault (DOMAIN , {})
0 commit comments