mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 15:17:35 +00:00
Adjust DOMAIN imports in homeassistant integration (#122774)
This commit is contained in:
parent
3e1aee4cbc
commit
2102a104d2
@ -23,7 +23,13 @@ from homeassistant.const import (
|
|||||||
SERVICE_TURN_OFF,
|
SERVICE_TURN_OFF,
|
||||||
SERVICE_TURN_ON,
|
SERVICE_TURN_ON,
|
||||||
)
|
)
|
||||||
import homeassistant.core as ha
|
from homeassistant.core import (
|
||||||
|
HomeAssistant,
|
||||||
|
ServiceCall,
|
||||||
|
ServiceResponse,
|
||||||
|
callback,
|
||||||
|
split_entity_id,
|
||||||
|
)
|
||||||
from homeassistant.exceptions import HomeAssistantError, Unauthorized, UnknownUser
|
from homeassistant.exceptions import HomeAssistantError, Unauthorized, UnknownUser
|
||||||
from homeassistant.helpers import config_validation as cv, recorder, restore_state
|
from homeassistant.helpers import config_validation as cv, recorder, restore_state
|
||||||
from homeassistant.helpers.entity_component import async_update_entity
|
from homeassistant.helpers.entity_component import async_update_entity
|
||||||
@ -76,14 +82,14 @@ SCHEMA_RESTART = vol.Schema({vol.Optional(ATTR_SAFE_MODE, default=False): bool})
|
|||||||
SHUTDOWN_SERVICES = (SERVICE_HOMEASSISTANT_STOP, SERVICE_HOMEASSISTANT_RESTART)
|
SHUTDOWN_SERVICES = (SERVICE_HOMEASSISTANT_STOP, SERVICE_HOMEASSISTANT_RESTART)
|
||||||
|
|
||||||
|
|
||||||
async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # noqa: C901
|
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa: C901
|
||||||
"""Set up general services related to Home Assistant."""
|
"""Set up general services related to Home Assistant."""
|
||||||
|
|
||||||
async def async_save_persistent_states(service: ha.ServiceCall) -> None:
|
async def async_save_persistent_states(service: ServiceCall) -> None:
|
||||||
"""Handle calls to homeassistant.save_persistent_states."""
|
"""Handle calls to homeassistant.save_persistent_states."""
|
||||||
await restore_state.RestoreStateData.async_save_persistent_states(hass)
|
await restore_state.RestoreStateData.async_save_persistent_states(hass)
|
||||||
|
|
||||||
async def async_handle_turn_service(service: ha.ServiceCall) -> None:
|
async def async_handle_turn_service(service: ServiceCall) -> None:
|
||||||
"""Handle calls to homeassistant.turn_on/off."""
|
"""Handle calls to homeassistant.turn_on/off."""
|
||||||
referenced = async_extract_referenced_entity_ids(hass, service)
|
referenced = async_extract_referenced_entity_ids(hass, service)
|
||||||
all_referenced = referenced.referenced | referenced.indirectly_referenced
|
all_referenced = referenced.referenced | referenced.indirectly_referenced
|
||||||
@ -98,10 +104,10 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
|
|
||||||
# Group entity_ids by domain. groupby requires sorted data.
|
# Group entity_ids by domain. groupby requires sorted data.
|
||||||
by_domain = it.groupby(
|
by_domain = it.groupby(
|
||||||
sorted(all_referenced), lambda item: ha.split_entity_id(item)[0]
|
sorted(all_referenced), lambda item: split_entity_id(item)[0]
|
||||||
)
|
)
|
||||||
|
|
||||||
tasks: list[Coroutine[Any, Any, ha.ServiceResponse]] = []
|
tasks: list[Coroutine[Any, Any, ServiceResponse]] = []
|
||||||
unsupported_entities: set[str] = set()
|
unsupported_entities: set[str] = set()
|
||||||
|
|
||||||
for domain, ent_ids in by_domain:
|
for domain, ent_ids in by_domain:
|
||||||
@ -145,24 +151,24 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
await asyncio.gather(*tasks)
|
await asyncio.gather(*tasks)
|
||||||
|
|
||||||
hass.services.async_register(
|
hass.services.async_register(
|
||||||
ha.DOMAIN, SERVICE_SAVE_PERSISTENT_STATES, async_save_persistent_states
|
DOMAIN, SERVICE_SAVE_PERSISTENT_STATES, async_save_persistent_states
|
||||||
)
|
)
|
||||||
|
|
||||||
service_schema = vol.Schema({ATTR_ENTITY_ID: cv.entity_ids}, extra=vol.ALLOW_EXTRA)
|
service_schema = vol.Schema({ATTR_ENTITY_ID: cv.entity_ids}, extra=vol.ALLOW_EXTRA)
|
||||||
|
|
||||||
hass.services.async_register(
|
hass.services.async_register(
|
||||||
ha.DOMAIN, SERVICE_TURN_OFF, async_handle_turn_service, schema=service_schema
|
DOMAIN, SERVICE_TURN_OFF, async_handle_turn_service, schema=service_schema
|
||||||
)
|
)
|
||||||
hass.services.async_register(
|
hass.services.async_register(
|
||||||
ha.DOMAIN, SERVICE_TURN_ON, async_handle_turn_service, schema=service_schema
|
DOMAIN, SERVICE_TURN_ON, async_handle_turn_service, schema=service_schema
|
||||||
)
|
)
|
||||||
hass.services.async_register(
|
hass.services.async_register(
|
||||||
ha.DOMAIN, SERVICE_TOGGLE, async_handle_turn_service, schema=service_schema
|
DOMAIN, SERVICE_TOGGLE, async_handle_turn_service, schema=service_schema
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_handle_core_service(call: ha.ServiceCall) -> None:
|
async def async_handle_core_service(call: ServiceCall) -> None:
|
||||||
"""Service handler for handling core services."""
|
"""Service handler for handling core services."""
|
||||||
stop_handler: Callable[[ha.HomeAssistant, bool], Coroutine[Any, Any, None]]
|
stop_handler: Callable[[HomeAssistant, bool], Coroutine[Any, Any, None]]
|
||||||
|
|
||||||
if call.service in SHUTDOWN_SERVICES and recorder.async_migration_in_progress(
|
if call.service in SHUTDOWN_SERVICES and recorder.async_migration_in_progress(
|
||||||
hass
|
hass
|
||||||
@ -193,7 +199,7 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
hass,
|
hass,
|
||||||
"Config error. See [the logs](/config/logs) for details.",
|
"Config error. See [the logs](/config/logs) for details.",
|
||||||
"Config validating",
|
"Config validating",
|
||||||
f"{ha.DOMAIN}.check_config",
|
f"{DOMAIN}.check_config",
|
||||||
)
|
)
|
||||||
raise HomeAssistantError(
|
raise HomeAssistantError(
|
||||||
f"The system cannot {call.service} "
|
f"The system cannot {call.service} "
|
||||||
@ -206,7 +212,7 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
stop_handler = hass.data[DATA_STOP_HANDLER]
|
stop_handler = hass.data[DATA_STOP_HANDLER]
|
||||||
await stop_handler(hass, True)
|
await stop_handler(hass, True)
|
||||||
|
|
||||||
async def async_handle_update_service(call: ha.ServiceCall) -> None:
|
async def async_handle_update_service(call: ServiceCall) -> None:
|
||||||
"""Service handler for updating an entity."""
|
"""Service handler for updating an entity."""
|
||||||
if call.context.user_id:
|
if call.context.user_id:
|
||||||
user = await hass.auth.async_get_user(call.context.user_id)
|
user = await hass.auth.async_get_user(call.context.user_id)
|
||||||
@ -235,26 +241,26 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
await asyncio.gather(*tasks)
|
await asyncio.gather(*tasks)
|
||||||
|
|
||||||
async_register_admin_service(
|
async_register_admin_service(
|
||||||
hass, ha.DOMAIN, SERVICE_HOMEASSISTANT_STOP, async_handle_core_service
|
hass, DOMAIN, SERVICE_HOMEASSISTANT_STOP, async_handle_core_service
|
||||||
)
|
)
|
||||||
async_register_admin_service(
|
async_register_admin_service(
|
||||||
hass,
|
hass,
|
||||||
ha.DOMAIN,
|
DOMAIN,
|
||||||
SERVICE_HOMEASSISTANT_RESTART,
|
SERVICE_HOMEASSISTANT_RESTART,
|
||||||
async_handle_core_service,
|
async_handle_core_service,
|
||||||
SCHEMA_RESTART,
|
SCHEMA_RESTART,
|
||||||
)
|
)
|
||||||
async_register_admin_service(
|
async_register_admin_service(
|
||||||
hass, ha.DOMAIN, SERVICE_CHECK_CONFIG, async_handle_core_service
|
hass, DOMAIN, SERVICE_CHECK_CONFIG, async_handle_core_service
|
||||||
)
|
)
|
||||||
hass.services.async_register(
|
hass.services.async_register(
|
||||||
ha.DOMAIN,
|
DOMAIN,
|
||||||
SERVICE_UPDATE_ENTITY,
|
SERVICE_UPDATE_ENTITY,
|
||||||
async_handle_update_service,
|
async_handle_update_service,
|
||||||
schema=SCHEMA_UPDATE_ENTITY,
|
schema=SCHEMA_UPDATE_ENTITY,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_handle_reload_config(call: ha.ServiceCall) -> None:
|
async def async_handle_reload_config(call: ServiceCall) -> None:
|
||||||
"""Service handler for reloading core config."""
|
"""Service handler for reloading core config."""
|
||||||
try:
|
try:
|
||||||
conf = await conf_util.async_hass_config_yaml(hass)
|
conf = await conf_util.async_hass_config_yaml(hass)
|
||||||
@ -263,13 +269,13 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
return
|
return
|
||||||
|
|
||||||
# auth only processed during startup
|
# auth only processed during startup
|
||||||
await conf_util.async_process_ha_core_config(hass, conf.get(ha.DOMAIN) or {})
|
await conf_util.async_process_ha_core_config(hass, conf.get(DOMAIN) or {})
|
||||||
|
|
||||||
async_register_admin_service(
|
async_register_admin_service(
|
||||||
hass, ha.DOMAIN, SERVICE_RELOAD_CORE_CONFIG, async_handle_reload_config
|
hass, DOMAIN, SERVICE_RELOAD_CORE_CONFIG, async_handle_reload_config
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_location(call: ha.ServiceCall) -> None:
|
async def async_set_location(call: ServiceCall) -> None:
|
||||||
"""Service handler to set location."""
|
"""Service handler to set location."""
|
||||||
service_data = {
|
service_data = {
|
||||||
"latitude": call.data[ATTR_LATITUDE],
|
"latitude": call.data[ATTR_LATITUDE],
|
||||||
@ -283,7 +289,7 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
|
|
||||||
async_register_admin_service(
|
async_register_admin_service(
|
||||||
hass,
|
hass,
|
||||||
ha.DOMAIN,
|
DOMAIN,
|
||||||
SERVICE_SET_LOCATION,
|
SERVICE_SET_LOCATION,
|
||||||
async_set_location,
|
async_set_location,
|
||||||
vol.Schema(
|
vol.Schema(
|
||||||
@ -295,15 +301,15 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_handle_reload_templates(call: ha.ServiceCall) -> None:
|
async def async_handle_reload_templates(call: ServiceCall) -> None:
|
||||||
"""Service handler to reload custom Jinja."""
|
"""Service handler to reload custom Jinja."""
|
||||||
await async_load_custom_templates(hass)
|
await async_load_custom_templates(hass)
|
||||||
|
|
||||||
async_register_admin_service(
|
async_register_admin_service(
|
||||||
hass, ha.DOMAIN, SERVICE_RELOAD_CUSTOM_TEMPLATES, async_handle_reload_templates
|
hass, DOMAIN, SERVICE_RELOAD_CUSTOM_TEMPLATES, async_handle_reload_templates
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_handle_reload_config_entry(call: ha.ServiceCall) -> None:
|
async def async_handle_reload_config_entry(call: ServiceCall) -> None:
|
||||||
"""Service handler for reloading a config entry."""
|
"""Service handler for reloading a config entry."""
|
||||||
reload_entries: set[str] = set()
|
reload_entries: set[str] = set()
|
||||||
if ATTR_ENTRY_ID in call.data:
|
if ATTR_ENTRY_ID in call.data:
|
||||||
@ -320,13 +326,13 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
|
|
||||||
async_register_admin_service(
|
async_register_admin_service(
|
||||||
hass,
|
hass,
|
||||||
ha.DOMAIN,
|
DOMAIN,
|
||||||
SERVICE_RELOAD_CONFIG_ENTRY,
|
SERVICE_RELOAD_CONFIG_ENTRY,
|
||||||
async_handle_reload_config_entry,
|
async_handle_reload_config_entry,
|
||||||
schema=SCHEMA_RELOAD_CONFIG_ENTRY,
|
schema=SCHEMA_RELOAD_CONFIG_ENTRY,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_handle_reload_all(call: ha.ServiceCall) -> None:
|
async def async_handle_reload_all(call: ServiceCall) -> None:
|
||||||
"""Service handler for calling all integration reload services.
|
"""Service handler for calling all integration reload services.
|
||||||
|
|
||||||
Calls all reload services on all active domains, which triggers the
|
Calls all reload services on all active domains, which triggers the
|
||||||
@ -363,16 +369,16 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
domain, service, context=call.context, blocking=True
|
domain, service, context=call.context, blocking=True
|
||||||
)
|
)
|
||||||
for domain, service in (
|
for domain, service in (
|
||||||
(ha.DOMAIN, SERVICE_RELOAD_CORE_CONFIG),
|
(DOMAIN, SERVICE_RELOAD_CORE_CONFIG),
|
||||||
("frontend", "reload_themes"),
|
("frontend", "reload_themes"),
|
||||||
(ha.DOMAIN, SERVICE_RELOAD_CUSTOM_TEMPLATES),
|
(DOMAIN, SERVICE_RELOAD_CUSTOM_TEMPLATES),
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
await asyncio.gather(*tasks)
|
await asyncio.gather(*tasks)
|
||||||
|
|
||||||
async_register_admin_service(
|
async_register_admin_service(
|
||||||
hass, ha.DOMAIN, SERVICE_RELOAD_ALL, async_handle_reload_all
|
hass, DOMAIN, SERVICE_RELOAD_ALL, async_handle_reload_all
|
||||||
)
|
)
|
||||||
|
|
||||||
exposed_entities = ExposedEntities(hass)
|
exposed_entities = ExposedEntities(hass)
|
||||||
@ -383,17 +389,17 @@ async def async_setup(hass: ha.HomeAssistant, config: ConfigType) -> bool: # no
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
async def _async_stop(hass: ha.HomeAssistant, restart: bool) -> None:
|
async def _async_stop(hass: HomeAssistant, restart: bool) -> None:
|
||||||
"""Stop home assistant."""
|
"""Stop home assistant."""
|
||||||
exit_code = RESTART_EXIT_CODE if restart else 0
|
exit_code = RESTART_EXIT_CODE if restart else 0
|
||||||
# Track trask in hass.data. No need to cleanup, we're stopping.
|
# Track trask in hass.data. No need to cleanup, we're stopping.
|
||||||
hass.data[KEY_HA_STOP] = asyncio.create_task(hass.async_stop(exit_code))
|
hass.data[KEY_HA_STOP] = asyncio.create_task(hass.async_stop(exit_code))
|
||||||
|
|
||||||
|
|
||||||
@ha.callback
|
@callback
|
||||||
def async_set_stop_handler(
|
def async_set_stop_handler(
|
||||||
hass: ha.HomeAssistant,
|
hass: HomeAssistant,
|
||||||
stop_handler: Callable[[ha.HomeAssistant, bool], Coroutine[Any, Any, None]],
|
stop_handler: Callable[[HomeAssistant, bool], Coroutine[Any, Any, None]],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set function which is called by the stop and restart services."""
|
"""Set function which is called by the stop and restart services."""
|
||||||
hass.data[DATA_STOP_HANDLER] = stop_handler
|
hass.data[DATA_STOP_HANDLER] = stop_handler
|
||||||
|
@ -15,7 +15,7 @@ from homeassistant.core import Event, HomeAssistant, callback
|
|||||||
from homeassistant.helpers.typing import NoEventData
|
from homeassistant.helpers.typing import NoEventData
|
||||||
from homeassistant.util.event_type import EventType
|
from homeassistant.util.event_type import EventType
|
||||||
|
|
||||||
from . import DOMAIN
|
from .const import DOMAIN
|
||||||
|
|
||||||
EVENT_TO_NAME: dict[EventType[Any] | str, str] = {
|
EVENT_TO_NAME: dict[EventType[Any] | str, str] = {
|
||||||
EVENT_HOMEASSISTANT_STOP: "stopped",
|
EVENT_HOMEASSISTANT_STOP: "stopped",
|
||||||
|
@ -23,13 +23,7 @@ from homeassistant.const import (
|
|||||||
STATE_OFF,
|
STATE_OFF,
|
||||||
STATE_ON,
|
STATE_ON,
|
||||||
)
|
)
|
||||||
from homeassistant.core import (
|
from homeassistant.core import HomeAssistant, ServiceCall, State, callback
|
||||||
DOMAIN as HOMEASSISTANT_DOMAIN,
|
|
||||||
HomeAssistant,
|
|
||||||
ServiceCall,
|
|
||||||
State,
|
|
||||||
callback,
|
|
||||||
)
|
|
||||||
from homeassistant.exceptions import HomeAssistantError, ServiceValidationError
|
from homeassistant.exceptions import HomeAssistantError, ServiceValidationError
|
||||||
from homeassistant.helpers import config_validation as cv, entity_platform
|
from homeassistant.helpers import config_validation as cv, entity_platform
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback, EntityPlatform
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback, EntityPlatform
|
||||||
@ -41,6 +35,8 @@ from homeassistant.helpers.state import async_reproduce_state
|
|||||||
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||||
from homeassistant.loader import async_get_integration
|
from homeassistant.loader import async_get_integration
|
||||||
|
|
||||||
|
from .const import DOMAIN
|
||||||
|
|
||||||
|
|
||||||
def _convert_states(states: dict[str, Any]) -> dict[str, State]:
|
def _convert_states(states: dict[str, Any]) -> dict[str, State]:
|
||||||
"""Convert state definitions to State objects."""
|
"""Convert state definitions to State objects."""
|
||||||
@ -92,7 +88,7 @@ STATES_SCHEMA = vol.All(dict, _convert_states)
|
|||||||
|
|
||||||
PLATFORM_SCHEMA = vol.Schema(
|
PLATFORM_SCHEMA = vol.Schema(
|
||||||
{
|
{
|
||||||
vol.Required(CONF_PLATFORM): HOMEASSISTANT_DOMAIN,
|
vol.Required(CONF_PLATFORM): DOMAIN,
|
||||||
vol.Required(STATES): vol.All(
|
vol.Required(STATES): vol.All(
|
||||||
cv.ensure_list,
|
cv.ensure_list,
|
||||||
[
|
[
|
||||||
@ -206,7 +202,7 @@ async def async_setup_platform(
|
|||||||
|
|
||||||
# Extract only the config for the Home Assistant platform, ignore the rest.
|
# Extract only the config for the Home Assistant platform, ignore the rest.
|
||||||
for p_type, p_config in conf_util.config_per_platform(conf, SCENE_DOMAIN):
|
for p_type, p_config in conf_util.config_per_platform(conf, SCENE_DOMAIN):
|
||||||
if p_type != HOMEASSISTANT_DOMAIN:
|
if p_type != DOMAIN:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
_process_scenes_config(hass, async_add_entities, p_config)
|
_process_scenes_config(hass, async_add_entities, p_config)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user