mirror of
https://github.com/home-assistant/core.git
synced 2025-07-09 22:37:11 +00:00
Refactor MQTT discovery to avoid creating closure if hash already in discovery_pending_discovered (#99458)
This commit is contained in:
parent
04bf126425
commit
5a8fc43212
@ -275,32 +275,34 @@ async def async_start( # noqa: C901
|
||||
|
||||
_LOGGER.debug("Process discovery payload %s", payload)
|
||||
discovery_hash = (component, discovery_id)
|
||||
if discovery_hash in mqtt_data.discovery_already_discovered or payload:
|
||||
|
||||
already_discovered = discovery_hash in mqtt_data.discovery_already_discovered
|
||||
if (
|
||||
already_discovered or payload
|
||||
) and discovery_hash not in mqtt_data.discovery_pending_discovered:
|
||||
discovery_pending_discovered = mqtt_data.discovery_pending_discovered
|
||||
|
||||
@callback
|
||||
def discovery_done(_: Any) -> None:
|
||||
pending = mqtt_data.discovery_pending_discovered[discovery_hash][
|
||||
"pending"
|
||||
]
|
||||
pending = discovery_pending_discovered[discovery_hash]["pending"]
|
||||
_LOGGER.debug("Pending discovery for %s: %s", discovery_hash, pending)
|
||||
if not pending:
|
||||
mqtt_data.discovery_pending_discovered[discovery_hash]["unsub"]()
|
||||
mqtt_data.discovery_pending_discovered.pop(discovery_hash)
|
||||
discovery_pending_discovered[discovery_hash]["unsub"]()
|
||||
discovery_pending_discovered.pop(discovery_hash)
|
||||
else:
|
||||
payload = pending.pop()
|
||||
async_process_discovery_payload(component, discovery_id, payload)
|
||||
|
||||
if discovery_hash not in mqtt_data.discovery_pending_discovered:
|
||||
mqtt_data.discovery_pending_discovered[discovery_hash] = {
|
||||
"unsub": async_dispatcher_connect(
|
||||
hass,
|
||||
MQTT_DISCOVERY_DONE.format(discovery_hash),
|
||||
discovery_done,
|
||||
),
|
||||
"pending": deque([]),
|
||||
}
|
||||
discovery_pending_discovered[discovery_hash] = {
|
||||
"unsub": async_dispatcher_connect(
|
||||
hass,
|
||||
MQTT_DISCOVERY_DONE.format(discovery_hash),
|
||||
discovery_done,
|
||||
),
|
||||
"pending": deque([]),
|
||||
}
|
||||
|
||||
if discovery_hash in mqtt_data.discovery_already_discovered:
|
||||
if already_discovered:
|
||||
# Dispatch update
|
||||
message = f"Component has already been discovered: {component} {discovery_id}, sending update"
|
||||
async_log_discovery_origin_info(message, payload)
|
||||
|
Loading…
x
Reference in New Issue
Block a user