Use a constant to reference homeassistant
domain (#113889)
* Use CONF_CORE to reference `homeassistant` domain * Just use DOMAIN * USE DOMAIN for `homeasistant` domain in config_schema.py * Use DOMAIN_HA as constant for homeassistant domain * Rename CONF_CORE to DOMAIN_HA * Rename DOMAIN_HA to HA_DOMAIN * Use relative import * Use direct imports
This commit is contained in:
parent
c661622332
commit
a4f52cc622
6 changed files with 51 additions and 43 deletions
|
@ -8,12 +8,14 @@ from homeassistant.helpers import config_validation as cv
|
|||
from homeassistant.helpers.trigger import TriggerActionType, TriggerInfo
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
|
||||
from ..const import DOMAIN
|
||||
|
||||
EVENT_START = "start"
|
||||
EVENT_SHUTDOWN = "shutdown"
|
||||
|
||||
TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
|
||||
{
|
||||
vol.Required(CONF_PLATFORM): "homeassistant",
|
||||
vol.Required(CONF_PLATFORM): DOMAIN,
|
||||
vol.Required(CONF_EVENT): vol.Any(EVENT_START, EVENT_SHUTDOWN),
|
||||
}
|
||||
)
|
||||
|
@ -36,7 +38,7 @@ async def async_attach_trigger(
|
|||
{
|
||||
"trigger": {
|
||||
**trigger_data,
|
||||
"platform": "homeassistant",
|
||||
"platform": DOMAIN,
|
||||
"event": event,
|
||||
"description": "Home Assistant stopping",
|
||||
}
|
||||
|
@ -51,7 +53,7 @@ async def async_attach_trigger(
|
|||
{
|
||||
"trigger": {
|
||||
**trigger_data,
|
||||
"platform": "homeassistant",
|
||||
"platform": DOMAIN,
|
||||
"event": event,
|
||||
"description": "Home Assistant starting",
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ from .const import (
|
|||
LEGACY_CONF_WHITELIST_EXTERNAL_DIRS,
|
||||
__version__,
|
||||
)
|
||||
from .core import DOMAIN as CONF_CORE, ConfigSource, HomeAssistant, callback
|
||||
from .core import DOMAIN as HA_DOMAIN, ConfigSource, HomeAssistant, callback
|
||||
from .exceptions import ConfigValidationError, HomeAssistantError
|
||||
from .generated.currencies import HISTORIC_CURRENCIES
|
||||
from .helpers import config_validation as cv, issue_registry as ir
|
||||
|
@ -247,12 +247,12 @@ CUSTOMIZE_CONFIG_SCHEMA = vol.Schema(
|
|||
|
||||
def _raise_issue_if_historic_currency(hass: HomeAssistant, currency: str) -> None:
|
||||
if currency not in HISTORIC_CURRENCIES:
|
||||
ir.async_delete_issue(hass, "homeassistant", "historic_currency")
|
||||
ir.async_delete_issue(hass, HA_DOMAIN, "historic_currency")
|
||||
return
|
||||
|
||||
ir.async_create_issue(
|
||||
hass,
|
||||
"homeassistant",
|
||||
HA_DOMAIN,
|
||||
"historic_currency",
|
||||
is_fixable=False,
|
||||
learn_more_url="homeassistant://config/general",
|
||||
|
@ -264,12 +264,12 @@ def _raise_issue_if_historic_currency(hass: HomeAssistant, currency: str) -> Non
|
|||
|
||||
def _raise_issue_if_no_country(hass: HomeAssistant, country: str | None) -> None:
|
||||
if country is not None:
|
||||
ir.async_delete_issue(hass, "homeassistant", "country_not_configured")
|
||||
ir.async_delete_issue(hass, HA_DOMAIN, "country_not_configured")
|
||||
return
|
||||
|
||||
ir.async_create_issue(
|
||||
hass,
|
||||
"homeassistant",
|
||||
HA_DOMAIN,
|
||||
"country_not_configured",
|
||||
is_fixable=False,
|
||||
learn_more_url="homeassistant://config/general",
|
||||
|
@ -288,7 +288,7 @@ def _raise_issue_if_legacy_templates(
|
|||
if legacy_templates:
|
||||
ir.async_create_issue(
|
||||
hass,
|
||||
"homeassistant",
|
||||
HA_DOMAIN,
|
||||
"legacy_templates_true",
|
||||
is_fixable=False,
|
||||
breaks_in_ha_version="2024.7.0",
|
||||
|
@ -297,12 +297,12 @@ def _raise_issue_if_legacy_templates(
|
|||
)
|
||||
return
|
||||
|
||||
ir.async_delete_issue(hass, "homeassistant", "legacy_templates_true")
|
||||
ir.async_delete_issue(hass, HA_DOMAIN, "legacy_templates_true")
|
||||
|
||||
if legacy_templates is False:
|
||||
ir.async_create_issue(
|
||||
hass,
|
||||
"homeassistant",
|
||||
HA_DOMAIN,
|
||||
"legacy_templates_false",
|
||||
is_fixable=False,
|
||||
breaks_in_ha_version="2024.7.0",
|
||||
|
@ -310,7 +310,7 @@ def _raise_issue_if_legacy_templates(
|
|||
translation_key="legacy_templates_false",
|
||||
)
|
||||
else:
|
||||
ir.async_delete_issue(hass, "homeassistant", "legacy_templates_false")
|
||||
ir.async_delete_issue(hass, HA_DOMAIN, "legacy_templates_false")
|
||||
|
||||
|
||||
def _validate_currency(data: Any) -> Any:
|
||||
|
@ -503,12 +503,12 @@ async def async_hass_config_yaml(hass: HomeAssistant) -> dict:
|
|||
for invalid_domain in invalid_domains:
|
||||
config.pop(invalid_domain)
|
||||
|
||||
core_config = config.get(CONF_CORE, {})
|
||||
core_config = config.get(HA_DOMAIN, {})
|
||||
try:
|
||||
await merge_packages_config(hass, config, core_config.get(CONF_PACKAGES, {}))
|
||||
except vol.Invalid as exc:
|
||||
suffix = ""
|
||||
if annotation := find_annotation(config, [CONF_CORE, CONF_PACKAGES, *exc.path]):
|
||||
if annotation := find_annotation(config, [HA_DOMAIN, CONF_PACKAGES, *exc.path]):
|
||||
suffix = f" at {_relpath(hass, annotation[0])}, line {annotation[1]}"
|
||||
_LOGGER.error(
|
||||
"Invalid package configuration '%s'%s: %s", CONF_PACKAGES, suffix, exc
|
||||
|
@ -731,7 +731,7 @@ def stringify_invalid(
|
|||
)
|
||||
else:
|
||||
message_prefix = f"Invalid config for '{domain}'"
|
||||
if domain != CONF_CORE and link:
|
||||
if domain != HA_DOMAIN and link:
|
||||
message_suffix = f", please check the docs at {link}"
|
||||
else:
|
||||
message_suffix = ""
|
||||
|
@ -814,7 +814,7 @@ def format_homeassistant_error(
|
|||
if annotation := find_annotation(config, [domain]):
|
||||
message_prefix += f" at {_relpath(hass, annotation[0])}, line {annotation[1]}"
|
||||
message = f"{message_prefix}: {str(exc) or repr(exc)}"
|
||||
if domain != CONF_CORE and link:
|
||||
if domain != HA_DOMAIN and link:
|
||||
message += f", please check the docs at {link}"
|
||||
|
||||
return message
|
||||
|
@ -933,7 +933,7 @@ async def async_process_ha_core_config(hass: HomeAssistant, config: dict) -> Non
|
|||
cust_glob = OrderedDict(config[CONF_CUSTOMIZE_GLOB])
|
||||
|
||||
for name, pkg in config[CONF_PACKAGES].items():
|
||||
if (pkg_cust := pkg.get(CONF_CORE)) is None:
|
||||
if (pkg_cust := pkg.get(HA_DOMAIN)) is None:
|
||||
continue
|
||||
|
||||
try:
|
||||
|
@ -957,7 +957,7 @@ def _log_pkg_error(
|
|||
) -> None:
|
||||
"""Log an error while merging packages."""
|
||||
message_prefix = f"Setup of package '{package}'"
|
||||
if annotation := find_annotation(config, [CONF_CORE, CONF_PACKAGES, package]):
|
||||
if annotation := find_annotation(config, [HA_DOMAIN, CONF_PACKAGES, package]):
|
||||
message_prefix += f" at {_relpath(hass, annotation[0])}, line {annotation[1]}"
|
||||
|
||||
_LOGGER.error("%s failed: %s", message_prefix, message)
|
||||
|
@ -1072,7 +1072,7 @@ async def merge_packages_config(
|
|||
continue
|
||||
|
||||
for comp_name, comp_conf in pack_conf.items():
|
||||
if comp_name == CONF_CORE:
|
||||
if comp_name == HA_DOMAIN:
|
||||
continue
|
||||
try:
|
||||
domain = cv.domain_key(comp_name)
|
||||
|
@ -1305,7 +1305,7 @@ def async_drop_config_annotations(
|
|||
|
||||
# Don't drop annotations from the homeassistant integration because it may
|
||||
# have configuration for other integrations as packages.
|
||||
if integration.domain in config and integration.domain != CONF_CORE:
|
||||
if integration.domain in config and integration.domain != HA_DOMAIN:
|
||||
drop_config_annotations_rec(config[integration.domain])
|
||||
return config
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@ import voluptuous as vol
|
|||
|
||||
from homeassistant import loader
|
||||
from homeassistant.config import ( # type: ignore[attr-defined]
|
||||
CONF_CORE,
|
||||
CONF_PACKAGES,
|
||||
CORE_CONFIG_SCHEMA,
|
||||
YAML_CONFIG_FILE,
|
||||
|
@ -23,7 +22,7 @@ from homeassistant.config import ( # type: ignore[attr-defined]
|
|||
load_yaml_config_file,
|
||||
merge_packages_config,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.core import DOMAIN as HA_DOMAIN, HomeAssistant
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
from homeassistant.requirements import (
|
||||
RequirementsNotFound,
|
||||
|
@ -158,10 +157,10 @@ async def async_check_ha_config_file( # noqa: C901
|
|||
return result.add_error(f"Error loading {config_path}: {err}")
|
||||
|
||||
# Extract and validate core [homeassistant] config
|
||||
core_config = config.pop(CONF_CORE, {})
|
||||
core_config = config.pop(HA_DOMAIN, {})
|
||||
try:
|
||||
core_config = CORE_CONFIG_SCHEMA(core_config)
|
||||
result[CONF_CORE] = core_config
|
||||
result[HA_DOMAIN] = core_config
|
||||
|
||||
# Merge packages
|
||||
await merge_packages_config(
|
||||
|
@ -169,8 +168,8 @@ async def async_check_ha_config_file( # noqa: C901
|
|||
)
|
||||
except vol.Invalid as err:
|
||||
result.add_error(
|
||||
format_schema_error(hass, err, CONF_CORE, core_config),
|
||||
CONF_CORE,
|
||||
format_schema_error(hass, err, HA_DOMAIN, core_config),
|
||||
HA_DOMAIN,
|
||||
core_config,
|
||||
)
|
||||
core_config = {}
|
||||
|
|
|
@ -4,13 +4,15 @@ from __future__ import annotations
|
|||
|
||||
import ast
|
||||
|
||||
from homeassistant.core import DOMAIN as HA_DOMAIN
|
||||
|
||||
from .model import Config, Integration
|
||||
|
||||
CONFIG_SCHEMA_IGNORE = {
|
||||
# Configuration under the homeassistant key is a special case, it's handled by
|
||||
# conf_util.async_process_ha_core_config already during bootstrapping, not by
|
||||
# a schema in the homeassistant integration.
|
||||
"homeassistant",
|
||||
HA_DOMAIN,
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -468,7 +468,7 @@ async def test_config_schema_via_packages(hass: HomeAssistant) -> None:
|
|||
"pack_11": {"rest": {"resource": "http://url1"}},
|
||||
"pack_list": {"rest": [{"resource": "http://url2"}]},
|
||||
}
|
||||
config = {hass_config.CONF_CORE: {hass_config.CONF_PACKAGES: packages}}
|
||||
config = {hass_config.HA_DOMAIN: {hass_config.CONF_PACKAGES: packages}}
|
||||
await hass_config.merge_packages_config(hass, config, packages)
|
||||
|
||||
assert len(config) == 2
|
||||
|
|
|
@ -32,7 +32,12 @@ from homeassistant.const import (
|
|||
CONF_UNIT_SYSTEM_METRIC,
|
||||
__version__,
|
||||
)
|
||||
from homeassistant.core import ConfigSource, HomeAssistant, HomeAssistantError
|
||||
from homeassistant.core import (
|
||||
DOMAIN as HA_DOMAIN,
|
||||
ConfigSource,
|
||||
HomeAssistant,
|
||||
HomeAssistantError,
|
||||
)
|
||||
from homeassistant.exceptions import ConfigValidationError
|
||||
from homeassistant.helpers import config_validation as cv, issue_registry as ir
|
||||
import homeassistant.helpers.check_config as check_config
|
||||
|
@ -1041,7 +1046,7 @@ async def test_check_ha_config_file_wrong(mock_check, hass: HomeAssistant) -> No
|
|||
"hass_config",
|
||||
[
|
||||
{
|
||||
config_util.CONF_CORE: {
|
||||
HA_DOMAIN: {
|
||||
config_util.CONF_PACKAGES: {
|
||||
"pack_dict": {"input_boolean": {"ib1": None}}
|
||||
}
|
||||
|
@ -1058,7 +1063,7 @@ async def test_async_hass_config_yaml_merge(
|
|||
conf = await config_util.async_hass_config_yaml(hass)
|
||||
|
||||
assert merge_log_err.call_count == 0
|
||||
assert conf[config_util.CONF_CORE].get(config_util.CONF_PACKAGES) is not None
|
||||
assert conf[HA_DOMAIN].get(config_util.CONF_PACKAGES) is not None
|
||||
assert len(conf) == 3
|
||||
assert len(conf["input_boolean"]) == 2
|
||||
assert len(conf["light"]) == 1
|
||||
|
@ -1086,7 +1091,7 @@ async def test_merge(merge_log_err, hass: HomeAssistant) -> None:
|
|||
},
|
||||
}
|
||||
config = {
|
||||
config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages},
|
||||
HA_DOMAIN: {config_util.CONF_PACKAGES: packages},
|
||||
"input_boolean": {"ib2": None},
|
||||
"light": {"platform": "test"},
|
||||
"automation": [],
|
||||
|
@ -1113,7 +1118,7 @@ async def test_merge_try_falsy(merge_log_err, hass: HomeAssistant) -> None:
|
|||
"pack_list2": {"light": OrderedDict()},
|
||||
}
|
||||
config = {
|
||||
config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages},
|
||||
HA_DOMAIN: {config_util.CONF_PACKAGES: packages},
|
||||
"automation": {"do": "something"},
|
||||
"light": {"some": "light"},
|
||||
}
|
||||
|
@ -1136,7 +1141,7 @@ async def test_merge_new(merge_log_err, hass: HomeAssistant) -> None:
|
|||
"api": {},
|
||||
},
|
||||
}
|
||||
config = {config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages}}
|
||||
config = {HA_DOMAIN: {config_util.CONF_PACKAGES: packages}}
|
||||
await config_util.merge_packages_config(hass, config, packages)
|
||||
|
||||
assert merge_log_err.call_count == 0
|
||||
|
@ -1154,7 +1159,7 @@ async def test_merge_type_mismatch(merge_log_err, hass: HomeAssistant) -> None:
|
|||
"pack_2": {"light": {"ib1": None}}, # light gets merged - ensure_list
|
||||
}
|
||||
config = {
|
||||
config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages},
|
||||
HA_DOMAIN: {config_util.CONF_PACKAGES: packages},
|
||||
"input_boolean": {"ib2": None},
|
||||
"input_select": [{"ib2": None}],
|
||||
"light": [{"platform": "two"}],
|
||||
|
@ -1170,13 +1175,13 @@ async def test_merge_type_mismatch(merge_log_err, hass: HomeAssistant) -> None:
|
|||
async def test_merge_once_only_keys(merge_log_err, hass: HomeAssistant) -> None:
|
||||
"""Test if we have a merge for a comp that may occur only once. Keys."""
|
||||
packages = {"pack_2": {"api": None}}
|
||||
config = {config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages}, "api": None}
|
||||
config = {HA_DOMAIN: {config_util.CONF_PACKAGES: packages}, "api": None}
|
||||
await config_util.merge_packages_config(hass, config, packages)
|
||||
assert config["api"] == OrderedDict()
|
||||
|
||||
packages = {"pack_2": {"api": {"key_3": 3}}}
|
||||
config = {
|
||||
config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages},
|
||||
HA_DOMAIN: {config_util.CONF_PACKAGES: packages},
|
||||
"api": {"key_1": 1, "key_2": 2},
|
||||
}
|
||||
await config_util.merge_packages_config(hass, config, packages)
|
||||
|
@ -1185,7 +1190,7 @@ async def test_merge_once_only_keys(merge_log_err, hass: HomeAssistant) -> None:
|
|||
# Duplicate keys error
|
||||
packages = {"pack_2": {"api": {"key": 2}}}
|
||||
config = {
|
||||
config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages},
|
||||
HA_DOMAIN: {config_util.CONF_PACKAGES: packages},
|
||||
"api": {"key": 1},
|
||||
}
|
||||
await config_util.merge_packages_config(hass, config, packages)
|
||||
|
@ -1200,7 +1205,7 @@ async def test_merge_once_only_lists(hass: HomeAssistant) -> None:
|
|||
}
|
||||
}
|
||||
config = {
|
||||
config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages},
|
||||
HA_DOMAIN: {config_util.CONF_PACKAGES: packages},
|
||||
"api": {"list_1": ["item_1"]},
|
||||
}
|
||||
await config_util.merge_packages_config(hass, config, packages)
|
||||
|
@ -1223,7 +1228,7 @@ async def test_merge_once_only_dictionaries(hass: HomeAssistant) -> None:
|
|||
}
|
||||
}
|
||||
config = {
|
||||
config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages},
|
||||
HA_DOMAIN: {config_util.CONF_PACKAGES: packages},
|
||||
"api": {"dict_1": {"key_1": 1, "dict_1.1": {"key_1.1": 1.1}}},
|
||||
}
|
||||
await config_util.merge_packages_config(hass, config, packages)
|
||||
|
@ -1257,7 +1262,7 @@ async def test_merge_duplicate_keys(merge_log_err, hass: HomeAssistant) -> None:
|
|||
"""Test if keys in dicts are duplicates."""
|
||||
packages = {"pack_1": {"input_select": {"ib1": None}}}
|
||||
config = {
|
||||
config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages},
|
||||
HA_DOMAIN: {config_util.CONF_PACKAGES: packages},
|
||||
"input_select": {"ib1": 1},
|
||||
}
|
||||
await config_util.merge_packages_config(hass, config, packages)
|
||||
|
@ -1417,7 +1422,7 @@ async def test_merge_split_component_definition(hass: HomeAssistant) -> None:
|
|||
"pack_1": {"light one": {"l1": None}},
|
||||
"pack_2": {"light two": {"l2": None}, "light three": {"l3": None}},
|
||||
}
|
||||
config = {config_util.CONF_CORE: {config_util.CONF_PACKAGES: packages}}
|
||||
config = {HA_DOMAIN: {config_util.CONF_PACKAGES: packages}}
|
||||
await config_util.merge_packages_config(hass, config, packages)
|
||||
|
||||
assert len(config) == 4
|
||||
|
@ -2308,7 +2313,7 @@ async def test_packages_schema_validation_error(
|
|||
]
|
||||
assert error_records == snapshot
|
||||
|
||||
assert len(config[config_util.CONF_CORE][config_util.CONF_PACKAGES]) == 0
|
||||
assert len(config[HA_DOMAIN][config_util.CONF_PACKAGES]) == 0
|
||||
|
||||
|
||||
def test_extract_domain_configs() -> None:
|
||||
|
|
Loading…
Add table
Reference in a new issue