mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Improve async_get_issue_tracker for custom integrations (#118016)
This commit is contained in:
parent
24d31924a0
commit
f896c7505b
@ -421,6 +421,9 @@ async def async_from_config_dict(
|
|||||||
start = monotonic()
|
start = monotonic()
|
||||||
|
|
||||||
hass.config_entries = config_entries.ConfigEntries(hass, config)
|
hass.config_entries = config_entries.ConfigEntries(hass, config)
|
||||||
|
# Prime custom component cache early so we know if registry entries are tied
|
||||||
|
# to a custom integration
|
||||||
|
await loader.async_get_custom_components(hass)
|
||||||
await async_load_base_functionality(hass)
|
await async_load_base_functionality(hass)
|
||||||
|
|
||||||
# Set up core.
|
# Set up core.
|
||||||
|
@ -1678,6 +1678,14 @@ def async_get_issue_tracker(
|
|||||||
# If we know nothing about the entity, suggest opening an issue on HA core
|
# If we know nothing about the entity, suggest opening an issue on HA core
|
||||||
return issue_tracker
|
return issue_tracker
|
||||||
|
|
||||||
|
if (
|
||||||
|
not integration
|
||||||
|
and (hass and integration_domain)
|
||||||
|
and (comps_or_future := hass.data.get(DATA_CUSTOM_COMPONENTS))
|
||||||
|
and not isinstance(comps_or_future, asyncio.Future)
|
||||||
|
):
|
||||||
|
integration = comps_or_future.get(integration_domain)
|
||||||
|
|
||||||
if not integration and (hass and integration_domain):
|
if not integration and (hass and integration_domain):
|
||||||
with suppress(IntegrationNotLoaded):
|
with suppress(IntegrationNotLoaded):
|
||||||
integration = async_get_loaded_integration(hass, integration_domain)
|
integration = async_get_loaded_integration(hass, integration_domain)
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import os
|
import os
|
||||||
|
import pathlib
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
from typing import Any
|
from typing import Any
|
||||||
@ -1110,14 +1111,18 @@ CUSTOM_ISSUE_TRACKER = "https://blablabla.com"
|
|||||||
# Integration domain is not currently deduced from module
|
# Integration domain is not currently deduced from module
|
||||||
(None, "homeassistant.components.hue.sensor", CORE_ISSUE_TRACKER),
|
(None, "homeassistant.components.hue.sensor", CORE_ISSUE_TRACKER),
|
||||||
("hue", "homeassistant.components.mqtt.sensor", CORE_ISSUE_TRACKER_HUE),
|
("hue", "homeassistant.components.mqtt.sensor", CORE_ISSUE_TRACKER_HUE),
|
||||||
# Custom integration with known issue tracker
|
# Loaded custom integration with known issue tracker
|
||||||
("bla_custom", "custom_components.bla_custom.sensor", CUSTOM_ISSUE_TRACKER),
|
("bla_custom", "custom_components.bla_custom.sensor", CUSTOM_ISSUE_TRACKER),
|
||||||
("bla_custom", None, CUSTOM_ISSUE_TRACKER),
|
("bla_custom", None, CUSTOM_ISSUE_TRACKER),
|
||||||
# Custom integration without known issue tracker
|
# Loaded custom integration without known issue tracker
|
||||||
(None, "custom_components.bla.sensor", None),
|
(None, "custom_components.bla.sensor", None),
|
||||||
("bla_custom_no_tracker", "custom_components.bla_custom.sensor", None),
|
("bla_custom_no_tracker", "custom_components.bla_custom.sensor", None),
|
||||||
("bla_custom_no_tracker", None, None),
|
("bla_custom_no_tracker", None, None),
|
||||||
("hue", "custom_components.bla.sensor", None),
|
("hue", "custom_components.bla.sensor", None),
|
||||||
|
# Unloaded custom integration with known issue tracker
|
||||||
|
("bla_custom_not_loaded", None, CUSTOM_ISSUE_TRACKER),
|
||||||
|
# Unloaded custom integration without known issue tracker
|
||||||
|
("bla_custom_not_loaded_no_tracker", None, None),
|
||||||
# Integration domain has priority over module
|
# Integration domain has priority over module
|
||||||
("bla_custom_no_tracker", "homeassistant.components.bla_custom.sensor", None),
|
("bla_custom_no_tracker", "homeassistant.components.bla_custom.sensor", None),
|
||||||
],
|
],
|
||||||
@ -1135,6 +1140,32 @@ async def test_async_get_issue_tracker(
|
|||||||
built_in=False,
|
built_in=False,
|
||||||
)
|
)
|
||||||
mock_integration(hass, MockModule("bla_custom_no_tracker"), built_in=False)
|
mock_integration(hass, MockModule("bla_custom_no_tracker"), built_in=False)
|
||||||
|
|
||||||
|
cust_unloaded_module = MockModule(
|
||||||
|
"bla_custom_not_loaded",
|
||||||
|
partial_manifest={"issue_tracker": CUSTOM_ISSUE_TRACKER},
|
||||||
|
)
|
||||||
|
cust_unloaded = loader.Integration(
|
||||||
|
hass,
|
||||||
|
f"{loader.PACKAGE_CUSTOM_COMPONENTS}.{cust_unloaded_module.DOMAIN}",
|
||||||
|
pathlib.Path(""),
|
||||||
|
cust_unloaded_module.mock_manifest(),
|
||||||
|
set(),
|
||||||
|
)
|
||||||
|
|
||||||
|
cust_unloaded_no_tracker_module = MockModule("bla_custom_not_loaded_no_tracker")
|
||||||
|
cust_unloaded_no_tracker = loader.Integration(
|
||||||
|
hass,
|
||||||
|
f"{loader.PACKAGE_CUSTOM_COMPONENTS}.{cust_unloaded_no_tracker_module.DOMAIN}",
|
||||||
|
pathlib.Path(""),
|
||||||
|
cust_unloaded_no_tracker_module.mock_manifest(),
|
||||||
|
set(),
|
||||||
|
)
|
||||||
|
hass.data["custom_components"] = {
|
||||||
|
"bla_custom_not_loaded": cust_unloaded,
|
||||||
|
"bla_custom_not_loaded_no_tracker": cust_unloaded_no_tracker,
|
||||||
|
}
|
||||||
|
|
||||||
assert (
|
assert (
|
||||||
loader.async_get_issue_tracker(hass, integration_domain=domain, module=module)
|
loader.async_get_issue_tracker(hass, integration_domain=domain, module=module)
|
||||||
== issue_tracker
|
== issue_tracker
|
||||||
|
Loading…
x
Reference in New Issue
Block a user