diff options
Diffstat (limited to 'pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch')
-rw-r--r-- | pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch b/pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch new file mode 100644 index 0000000000000..4756e4a2c389a --- /dev/null +++ b/pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch @@ -0,0 +1,109 @@ +diff --git a/custom_components/spook/__init__.py b/custom_components/spook/__init__.py +index 213fb2c..c7dc299 100644 +--- a/custom_components/spook/__init__.py ++++ b/custom_components/spook/__init__.py +@@ -23,8 +23,6 @@ from .templating import SpookTemplateFunctionManager + from .util import ( + async_ensure_template_environments_exists, + async_forward_setup_entry, +- link_sub_integrations, +- unlink_sub_integrations, + ) + + if TYPE_CHECKING: +@@ -34,48 +32,6 @@ if TYPE_CHECKING: + + async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + """Set up from a config entry.""" +- # Symlink all sub integrations from Spook to the parent integrations folder +- # if one is missing, we have to restart Home Assistant. +- # This is a workaround for the fact that Home Assistant doesn't support +- # sub integrations. +- if await hass.async_add_executor_job(link_sub_integrations, hass): +- LOGGER.debug("Newly symlinked sub integrations, restarting Home Assistant") +- +- @callback +- def _restart(_: Event | None = None) -> None: +- """Restart Home Assistant.""" +- hass.data["homeassistant_stop"] = asyncio.create_task( +- hass.async_stop(RESTART_EXIT_CODE), +- ) +- +- # User asked to restart Home Assistant in the config flow. +- if hass.data.get(DOMAIN) == "Boo!": +- _restart() +- return False +- +- # Should be OK to restart. Better to do it before anything else started. +- if hass.state == CoreState.starting: +- _restart() +- return False +- +- # If all other fails, but we are not running yet... wait for it. +- if hass.state == CoreState.not_running: +- # Listen to both... just in case. +- hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, _restart) +- hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STARTED, _restart) +- return False +- +- LOGGER.info( +- "Home Assistant needs to be restarted in for Spook to complete setting up", +- ) +- ir.async_create_issue( +- hass=hass, +- domain=DOMAIN, +- issue_id="restart_required", +- is_fixable=True, +- severity=ir.IssueSeverity.WARNING, +- translation_key="restart_required", +- ) + + # Ensure template environments exists + async_ensure_template_environments_exists(hass) +@@ -120,4 +76,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + + async def async_remove_entry(hass: HomeAssistant, _: ConfigEntry) -> None: + """Remove a config entry.""" +- await hass.async_add_executor_job(unlink_sub_integrations, hass) +diff --git a/custom_components/spook/util.py b/custom_components/spook/util.py +index 32e9bd2..845d463 100644 +--- a/custom_components/spook/util.py ++++ b/custom_components/spook/util.py +@@ -104,37 +104,6 @@ async def async_forward_platform_entry_setups_to_ectoplasm( + ) + + +-def link_sub_integrations(hass: HomeAssistant) -> bool: +- """Link Spook sub integrations.""" +- LOGGER.debug("Linking up Spook sub integrations") +- +- changes = False +- for manifest in Path(__file__).parent.rglob("integrations/*/manifest.json"): +- LOGGER.debug("Linking Spook sub integration: %s", manifest.parent.name) +- dest = Path(hass.config.config_dir) / "custom_components" / manifest.parent.name +- if not dest.exists(): +- src = ( +- Path(hass.config.config_dir) +- / "custom_components" +- / DOMAIN +- / "integrations" +- / manifest.parent.name +- ) +- dest.symlink_to(src) +- changes = True +- return changes +- +- +-def unlink_sub_integrations(hass: HomeAssistant) -> None: +- """Unlink Spook sub integrations.""" +- LOGGER.debug("Unlinking Spook sub integrations") +- for manifest in Path(__file__).parent.rglob("integrations/*/manifest.json"): +- LOGGER.debug("Unlinking Spook sub integration: %s", manifest.parent.name) +- dest = Path(hass.config.config_dir) / "custom_components" / manifest.parent.name +- if dest.exists(): +- dest.unlink() +- +- + @callback + def async_ensure_template_environments_exists(hass: HomeAssistant) -> None: + """Ensure default template environments exist. |