mirror of
https://github.com/home-assistant/core.git
synced 2025-07-10 06:47:09 +00:00
Fix race to rename entity (#142584)
This commit is contained in:
parent
074378bef6
commit
8cb62341ef
@ -170,12 +170,12 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
exclude_event_types=exclude_event_types,
|
exclude_event_types=exclude_event_types,
|
||||||
)
|
)
|
||||||
get_instance.cache_clear()
|
get_instance.cache_clear()
|
||||||
|
entity_registry.async_setup(hass)
|
||||||
instance.async_initialize()
|
instance.async_initialize()
|
||||||
instance.async_register()
|
instance.async_register()
|
||||||
instance.start()
|
instance.start()
|
||||||
async_register_services(hass, instance)
|
async_register_services(hass, instance)
|
||||||
websocket_api.async_setup(hass)
|
websocket_api.async_setup(hass)
|
||||||
entity_registry.async_setup(hass)
|
|
||||||
|
|
||||||
await _async_setup_integration_platform(hass, instance)
|
await _async_setup_integration_platform(hass, instance)
|
||||||
|
|
||||||
|
@ -4,8 +4,9 @@ import logging
|
|||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from homeassistant.core import Event, HomeAssistant, callback
|
from homeassistant.core import Event, HomeAssistant, callback
|
||||||
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
from homeassistant.helpers import entity_registry as er
|
from homeassistant.helpers import entity_registry as er
|
||||||
from homeassistant.helpers.start import async_at_start
|
from homeassistant.helpers.event import async_has_entity_registry_updated_listeners
|
||||||
|
|
||||||
from .core import Recorder
|
from .core import Recorder
|
||||||
from .util import filter_unique_constraint_integrity_error, get_instance, session_scope
|
from .util import filter_unique_constraint_integrity_error, get_instance, session_scope
|
||||||
@ -40,16 +41,17 @@ def async_setup(hass: HomeAssistant) -> None:
|
|||||||
"""Handle entity_id changed filter."""
|
"""Handle entity_id changed filter."""
|
||||||
return event_data["action"] == "update" and "old_entity_id" in event_data
|
return event_data["action"] == "update" and "old_entity_id" in event_data
|
||||||
|
|
||||||
@callback
|
if async_has_entity_registry_updated_listeners(hass):
|
||||||
def _setup_entity_registry_event_handler(hass: HomeAssistant) -> None:
|
raise HomeAssistantError(
|
||||||
"""Subscribe to event registry events."""
|
"The recorder entity registry listener must be installed"
|
||||||
hass.bus.async_listen(
|
" before async_track_entity_registry_updated_event is called"
|
||||||
er.EVENT_ENTITY_REGISTRY_UPDATED,
|
|
||||||
_async_entity_id_changed,
|
|
||||||
event_filter=entity_registry_changed_filter,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
async_at_start(hass, _setup_entity_registry_event_handler)
|
hass.bus.async_listen(
|
||||||
|
er.EVENT_ENTITY_REGISTRY_UPDATED,
|
||||||
|
_async_entity_id_changed,
|
||||||
|
event_filter=entity_registry_changed_filter,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def update_states_metadata(
|
def update_states_metadata(
|
||||||
|
@ -77,6 +77,7 @@ from homeassistant.helpers import (
|
|||||||
issue_registry as ir,
|
issue_registry as ir,
|
||||||
recorder as recorder_helper,
|
recorder as recorder_helper,
|
||||||
)
|
)
|
||||||
|
from homeassistant.helpers.event import async_track_entity_registry_updated_event
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
from homeassistant.util import dt as dt_util
|
from homeassistant.util import dt as dt_util
|
||||||
@ -2798,3 +2799,22 @@ async def test_empty_entity_id(
|
|||||||
hass.bus.async_fire("hello", {"entity_id": ""})
|
hass.bus.async_fire("hello", {"entity_id": ""})
|
||||||
await async_wait_recording_done(hass)
|
await async_wait_recording_done(hass)
|
||||||
assert "Invalid entity ID" not in caplog.text
|
assert "Invalid entity ID" not in caplog.text
|
||||||
|
|
||||||
|
|
||||||
|
async def test_setting_up_recorder_fails_entity_registry_listener(
|
||||||
|
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
|
||||||
|
) -> None:
|
||||||
|
"""Test recorder setup fails if an entity registry listener is in place."""
|
||||||
|
async_track_entity_registry_updated_event(hass, "test.test", lambda x: x)
|
||||||
|
recorder_helper.async_initialize_recorder(hass)
|
||||||
|
with patch("homeassistant.components.recorder.ALLOW_IN_MEMORY_DB", True):
|
||||||
|
assert not await async_setup_component(
|
||||||
|
hass,
|
||||||
|
recorder.DOMAIN,
|
||||||
|
{recorder.DOMAIN: {recorder.CONF_DB_URL: "sqlite://"}},
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert (
|
||||||
|
"The recorder entity registry listener must be installed before "
|
||||||
|
"async_track_entity_registry_updated_event is called" in caplog.text
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user