Updated apps
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
"""Spook - Your homie. Ectoplasm setup forwarding helpers."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import importlib
|
||||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from .const import LOGGER
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from types import ModuleType
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
|
||||
async def async_forward_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
entry: ConfigEntry,
|
||||
) -> None:
|
||||
"""Set up Spook ectoplasms."""
|
||||
LOGGER.debug("Setting up Spook ectoplasms")
|
||||
|
||||
modules: list[ModuleType] = []
|
||||
|
||||
def _load_all_ectoplasm_modules() -> None:
|
||||
"""Load all Spook ectoplasm modules."""
|
||||
for module_file in Path(__file__).parent.rglob("ectoplasms/*/__init__.py"):
|
||||
module_path = str(module_file.relative_to(Path(__file__).parent))[
|
||||
:-3
|
||||
].replace(
|
||||
"/",
|
||||
".",
|
||||
)
|
||||
LOGGER.debug("Loading Spook ectoplasm: %s", module_path)
|
||||
module = importlib.import_module(f".{module_path}", __package__)
|
||||
if hasattr(module, "async_setup_entry"):
|
||||
modules.append(module)
|
||||
LOGGER.debug("Setting up Spook ectoplasm: %s", module_path)
|
||||
|
||||
await hass.async_add_import_executor_job(_load_all_ectoplasm_modules)
|
||||
await asyncio.gather(*(module.async_setup_entry(hass, entry) for module in modules))
|
||||
|
||||
|
||||
async def async_forward_platform_entry_setups_to_ectoplasm(
|
||||
hass: HomeAssistant,
|
||||
entry: ConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
platform: Platform,
|
||||
) -> None:
|
||||
"""Set up Spook ectoplasm platform."""
|
||||
LOGGER.debug("Setting up Spook ectoplasm platform: %s", platform)
|
||||
|
||||
modules: list[ModuleType] = []
|
||||
|
||||
def _load_all_ectoplasm_platform_modules() -> None:
|
||||
"""Load all Spook ectoplasm platform modules."""
|
||||
for module_file in Path(__file__).parent.rglob(f"ectoplasms/*/{platform}.py"):
|
||||
module_path = str(module_file.relative_to(Path(__file__).parent))[
|
||||
:-3
|
||||
].replace(
|
||||
"/",
|
||||
".",
|
||||
)
|
||||
LOGGER.debug("Loading Spook %s from ectoplasm: %s", platform, module_path)
|
||||
modules.append(importlib.import_module(f".{module_path}", __package__))
|
||||
LOGGER.debug("Setting up Spook ectoplasm %s: %s", platform, module_path)
|
||||
|
||||
await hass.async_add_import_executor_job(_load_all_ectoplasm_platform_modules)
|
||||
await asyncio.gather(
|
||||
*(
|
||||
module.async_setup_entry(hass, entry, async_add_entities)
|
||||
for module in modules
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user