mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Remove unneeded dispatcher in mqtt discovery (#118205)
This commit is contained in:
parent
9dc580e5de
commit
c15f7f304f
@ -54,7 +54,6 @@ MQTT_DISCOVERY_UPDATED: SignalTypeFormat[MQTTDiscoveryPayload] = SignalTypeForma
|
|||||||
MQTT_DISCOVERY_NEW: SignalTypeFormat[MQTTDiscoveryPayload] = SignalTypeFormat(
|
MQTT_DISCOVERY_NEW: SignalTypeFormat[MQTTDiscoveryPayload] = SignalTypeFormat(
|
||||||
"mqtt_discovery_new_{}_{}"
|
"mqtt_discovery_new_{}_{}"
|
||||||
)
|
)
|
||||||
MQTT_DISCOVERY_NEW_COMPONENT = "mqtt_discovery_new_component"
|
|
||||||
MQTT_DISCOVERY_DONE: SignalTypeFormat[Any] = SignalTypeFormat(
|
MQTT_DISCOVERY_DONE: SignalTypeFormat[Any] = SignalTypeFormat(
|
||||||
"mqtt_discovery_done_{}_{}"
|
"mqtt_discovery_done_{}_{}"
|
||||||
)
|
)
|
||||||
@ -110,17 +109,11 @@ async def async_start( # noqa: C901
|
|||||||
mqtt_data = hass.data[DATA_MQTT]
|
mqtt_data = hass.data[DATA_MQTT]
|
||||||
platform_setup_lock: dict[str, asyncio.Lock] = {}
|
platform_setup_lock: dict[str, asyncio.Lock] = {}
|
||||||
|
|
||||||
async def _async_component_setup(discovery_payload: MQTTDiscoveryPayload) -> None:
|
@callback
|
||||||
"""Perform component set up."""
|
def _async_add_component(discovery_payload: MQTTDiscoveryPayload) -> None:
|
||||||
|
"""Add a component from a discovery message."""
|
||||||
discovery_hash = discovery_payload.discovery_data[ATTR_DISCOVERY_HASH]
|
discovery_hash = discovery_payload.discovery_data[ATTR_DISCOVERY_HASH]
|
||||||
component, discovery_id = discovery_hash
|
component, discovery_id = discovery_hash
|
||||||
platform_setup_lock.setdefault(component, asyncio.Lock())
|
|
||||||
async with platform_setup_lock[component]:
|
|
||||||
if component not in mqtt_data.platforms_loaded:
|
|
||||||
await async_forward_entry_setup_and_setup_discovery(
|
|
||||||
hass, config_entry, {component}
|
|
||||||
)
|
|
||||||
# Add component
|
|
||||||
message = f"Found new component: {component} {discovery_id}"
|
message = f"Found new component: {component} {discovery_id}"
|
||||||
async_log_discovery_origin_info(message, discovery_payload)
|
async_log_discovery_origin_info(message, discovery_payload)
|
||||||
mqtt_data.discovery_already_discovered.add(discovery_hash)
|
mqtt_data.discovery_already_discovered.add(discovery_hash)
|
||||||
@ -128,11 +121,16 @@ async def async_start( # noqa: C901
|
|||||||
hass, MQTT_DISCOVERY_NEW.format(component, "mqtt"), discovery_payload
|
hass, MQTT_DISCOVERY_NEW.format(component, "mqtt"), discovery_payload
|
||||||
)
|
)
|
||||||
|
|
||||||
mqtt_data.reload_dispatchers.append(
|
async def _async_component_setup(
|
||||||
async_dispatcher_connect(
|
component: str, discovery_payload: MQTTDiscoveryPayload
|
||||||
hass, MQTT_DISCOVERY_NEW_COMPONENT, _async_component_setup
|
) -> None:
|
||||||
)
|
"""Perform component set up."""
|
||||||
)
|
async with platform_setup_lock.setdefault(component, asyncio.Lock()):
|
||||||
|
if component not in mqtt_data.platforms_loaded:
|
||||||
|
await async_forward_entry_setup_and_setup_discovery(
|
||||||
|
hass, config_entry, {component}
|
||||||
|
)
|
||||||
|
_async_add_component(discovery_payload)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discovery_message_received(msg: ReceiveMessage) -> None: # noqa: C901
|
def async_discovery_message_received(msg: ReceiveMessage) -> None: # noqa: C901
|
||||||
@ -297,7 +295,9 @@ async def async_start( # noqa: C901
|
|||||||
|
|
||||||
if component not in mqtt_data.platforms_loaded and payload:
|
if component not in mqtt_data.platforms_loaded and payload:
|
||||||
# Load component first
|
# Load component first
|
||||||
async_dispatcher_send(hass, MQTT_DISCOVERY_NEW_COMPONENT, payload)
|
config_entry.async_create_task(
|
||||||
|
hass, _async_component_setup(component, payload)
|
||||||
|
)
|
||||||
elif already_discovered:
|
elif already_discovered:
|
||||||
# Dispatch update
|
# Dispatch update
|
||||||
message = f"Component has already been discovered: {component} {discovery_id}, sending update"
|
message = f"Component has already been discovered: {component} {discovery_id}, sending update"
|
||||||
@ -306,13 +306,7 @@ async def async_start( # noqa: C901
|
|||||||
hass, MQTT_DISCOVERY_UPDATED.format(*discovery_hash), payload
|
hass, MQTT_DISCOVERY_UPDATED.format(*discovery_hash), payload
|
||||||
)
|
)
|
||||||
elif payload:
|
elif payload:
|
||||||
# Add component
|
_async_add_component(payload)
|
||||||
message = f"Found new component: {component} {discovery_id}"
|
|
||||||
async_log_discovery_origin_info(message, payload)
|
|
||||||
mqtt_data.discovery_already_discovered.add(discovery_hash)
|
|
||||||
async_dispatcher_send(
|
|
||||||
hass, MQTT_DISCOVERY_NEW.format(component, "mqtt"), payload
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
# Unhandled discovery message
|
# Unhandled discovery message
|
||||||
async_dispatcher_send(
|
async_dispatcher_send(
|
||||||
|
@ -18,7 +18,6 @@ from homeassistant.components.mqtt.abbreviations import (
|
|||||||
from homeassistant.components.mqtt.discovery import (
|
from homeassistant.components.mqtt.discovery import (
|
||||||
MQTT_DISCOVERY_DONE,
|
MQTT_DISCOVERY_DONE,
|
||||||
MQTT_DISCOVERY_NEW,
|
MQTT_DISCOVERY_NEW,
|
||||||
MQTT_DISCOVERY_NEW_COMPONENT,
|
|
||||||
MQTT_DISCOVERY_UPDATED,
|
MQTT_DISCOVERY_UPDATED,
|
||||||
MQTTDiscoveryPayload,
|
MQTTDiscoveryPayload,
|
||||||
async_start,
|
async_start,
|
||||||
@ -1783,7 +1782,6 @@ async def test_update_with_bad_config_not_breaks_discovery(
|
|||||||
"signal_message",
|
"signal_message",
|
||||||
[
|
[
|
||||||
MQTT_DISCOVERY_NEW,
|
MQTT_DISCOVERY_NEW,
|
||||||
MQTT_DISCOVERY_NEW_COMPONENT,
|
|
||||||
MQTT_DISCOVERY_UPDATED,
|
MQTT_DISCOVERY_UPDATED,
|
||||||
MQTT_DISCOVERY_DONE,
|
MQTT_DISCOVERY_DONE,
|
||||||
],
|
],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user