mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Pass job type to event listeners when creating entities (#112551)
This commit is contained in:
parent
84455dbe1d
commit
a7b4cd3512
@ -46,6 +46,7 @@ from homeassistant.const import (
|
||||
from homeassistant.core import (
|
||||
CALLBACK_TYPE,
|
||||
Context,
|
||||
HassJobType,
|
||||
HomeAssistant,
|
||||
callback,
|
||||
get_release_channel,
|
||||
@ -1430,7 +1431,10 @@ class Entity(
|
||||
|
||||
self.async_on_remove(
|
||||
async_track_entity_registry_updated_event(
|
||||
self.hass, self.entity_id, self._async_registry_updated
|
||||
self.hass,
|
||||
self.entity_id,
|
||||
self._async_registry_updated,
|
||||
job_type=HassJobType.Callback,
|
||||
)
|
||||
)
|
||||
self._async_subscribe_device_updates()
|
||||
@ -1545,6 +1549,7 @@ class Entity(
|
||||
self.hass,
|
||||
device_id,
|
||||
self._async_device_registry_updated,
|
||||
job_type=HassJobType.Callback,
|
||||
)
|
||||
if (
|
||||
not self._on_remove
|
||||
|
@ -299,6 +299,7 @@ def async_track_state_change_event(
|
||||
hass: HomeAssistant,
|
||||
entity_ids: str | Iterable[str],
|
||||
action: Callable[[EventType[EventStateChangedData]], Any],
|
||||
job_type: HassJobType | None = None,
|
||||
) -> CALLBACK_TYPE:
|
||||
"""Track specific state change events indexed by entity_id.
|
||||
|
||||
@ -313,7 +314,7 @@ def async_track_state_change_event(
|
||||
"""
|
||||
if not (entity_ids := _async_string_to_lower_list(entity_ids)):
|
||||
return _remove_empty_listener
|
||||
return _async_track_state_change_event(hass, entity_ids, action)
|
||||
return _async_track_state_change_event(hass, entity_ids, action, job_type)
|
||||
|
||||
|
||||
@callback
|
||||
@ -361,9 +362,12 @@ def _async_track_state_change_event(
|
||||
hass: HomeAssistant,
|
||||
entity_ids: str | Iterable[str],
|
||||
action: Callable[[EventType[EventStateChangedData]], Any],
|
||||
job_type: HassJobType | None,
|
||||
) -> CALLBACK_TYPE:
|
||||
"""async_track_state_change_event without lowercasing."""
|
||||
return _async_track_event(_KEYED_TRACK_STATE_CHANGE, hass, entity_ids, action)
|
||||
return _async_track_event(
|
||||
_KEYED_TRACK_STATE_CHANGE, hass, entity_ids, action, job_type
|
||||
)
|
||||
|
||||
|
||||
@callback
|
||||
@ -397,6 +401,7 @@ def _async_track_event(
|
||||
hass: HomeAssistant,
|
||||
keys: str | Iterable[str],
|
||||
action: Callable[[EventType[_TypedDictT]], None],
|
||||
job_type: HassJobType | None,
|
||||
) -> CALLBACK_TYPE:
|
||||
"""Track an event by a specific key.
|
||||
|
||||
@ -429,7 +434,7 @@ def _async_track_event(
|
||||
run_immediately=tracker.run_immediately,
|
||||
)
|
||||
|
||||
job = HassJob(action, f"track {tracker.event_type} event {keys}")
|
||||
job = HassJob(action, f"track {tracker.event_type} event {keys}", job_type=job_type)
|
||||
|
||||
for key in keys:
|
||||
if callback_list := callbacks.get(key):
|
||||
@ -494,6 +499,7 @@ def async_track_entity_registry_updated_event(
|
||||
hass: HomeAssistant,
|
||||
entity_ids: str | Iterable[str],
|
||||
action: Callable[[EventType[EventEntityRegistryUpdatedData]], Any],
|
||||
job_type: HassJobType | None = None,
|
||||
) -> CALLBACK_TYPE:
|
||||
"""Track specific entity registry updated events indexed by entity_id.
|
||||
|
||||
@ -502,10 +508,7 @@ def async_track_entity_registry_updated_event(
|
||||
Similar to async_track_state_change_event.
|
||||
"""
|
||||
return _async_track_event(
|
||||
_KEYED_TRACK_ENTITY_REGISTRY_UPDATED,
|
||||
hass,
|
||||
entity_ids,
|
||||
action,
|
||||
_KEYED_TRACK_ENTITY_REGISTRY_UPDATED, hass, entity_ids, action, job_type
|
||||
)
|
||||
|
||||
|
||||
@ -558,16 +561,14 @@ def async_track_device_registry_updated_event(
|
||||
hass: HomeAssistant,
|
||||
device_ids: str | Iterable[str],
|
||||
action: Callable[[EventType[EventDeviceRegistryUpdatedData]], Any],
|
||||
job_type: HassJobType | None = None,
|
||||
) -> CALLBACK_TYPE:
|
||||
"""Track specific device registry updated events indexed by device_id.
|
||||
|
||||
Similar to async_track_entity_registry_updated_event.
|
||||
"""
|
||||
return _async_track_event(
|
||||
_KEYED_TRACK_DEVICE_REGISTRY_UPDATED,
|
||||
hass,
|
||||
device_ids,
|
||||
action,
|
||||
_KEYED_TRACK_DEVICE_REGISTRY_UPDATED, hass, device_ids, action, job_type
|
||||
)
|
||||
|
||||
|
||||
@ -606,11 +607,12 @@ def async_track_state_added_domain(
|
||||
hass: HomeAssistant,
|
||||
domains: str | Iterable[str],
|
||||
action: Callable[[EventType[EventStateChangedData]], Any],
|
||||
job_type: HassJobType | None = None,
|
||||
) -> CALLBACK_TYPE:
|
||||
"""Track state change events when an entity is added to domains."""
|
||||
if not (domains := _async_string_to_lower_list(domains)):
|
||||
return _remove_empty_listener
|
||||
return _async_track_state_added_domain(hass, domains, action)
|
||||
return _async_track_state_added_domain(hass, domains, action, job_type)
|
||||
|
||||
|
||||
_KEYED_TRACK_STATE_ADDED_DOMAIN = _KeyedEventTracker(
|
||||
@ -628,9 +630,12 @@ def _async_track_state_added_domain(
|
||||
hass: HomeAssistant,
|
||||
domains: str | Iterable[str],
|
||||
action: Callable[[EventType[EventStateChangedData]], Any],
|
||||
job_type: HassJobType | None,
|
||||
) -> CALLBACK_TYPE:
|
||||
"""Track state change events when an entity is added to domains."""
|
||||
return _async_track_event(_KEYED_TRACK_STATE_ADDED_DOMAIN, hass, domains, action)
|
||||
return _async_track_event(
|
||||
_KEYED_TRACK_STATE_ADDED_DOMAIN, hass, domains, action, job_type
|
||||
)
|
||||
|
||||
|
||||
@callback
|
||||
@ -661,9 +666,12 @@ def async_track_state_removed_domain(
|
||||
hass: HomeAssistant,
|
||||
domains: str | Iterable[str],
|
||||
action: Callable[[EventType[EventStateChangedData]], Any],
|
||||
job_type: HassJobType | None = None,
|
||||
) -> CALLBACK_TYPE:
|
||||
"""Track state change events when an entity is removed from domains."""
|
||||
return _async_track_event(_KEYED_TRACK_STATE_REMOVED_DOMAIN, hass, domains, action)
|
||||
return _async_track_event(
|
||||
_KEYED_TRACK_STATE_REMOVED_DOMAIN, hass, domains, action, job_type
|
||||
)
|
||||
|
||||
|
||||
@callback
|
||||
@ -781,7 +789,7 @@ class _TrackStateChangeFiltered:
|
||||
return
|
||||
|
||||
self._listeners[_ENTITIES_LISTENER] = _async_track_state_change_event(
|
||||
self.hass, entities, self._action
|
||||
self.hass, entities, self._action, self._action_as_hassjob.job_type
|
||||
)
|
||||
|
||||
@callback
|
||||
@ -798,7 +806,7 @@ class _TrackStateChangeFiltered:
|
||||
return
|
||||
|
||||
self._listeners[_DOMAINS_LISTENER] = _async_track_state_added_domain(
|
||||
self.hass, domains, self._state_added
|
||||
self.hass, domains, self._state_added, HassJobType.Callback
|
||||
)
|
||||
|
||||
@callback
|
||||
|
@ -453,7 +453,7 @@ async def test_async_track_state_change_event(hass: HomeAssistant) -> None:
|
||||
raise ValueError
|
||||
|
||||
unsub_single = async_track_state_change_event(
|
||||
hass, ["light.Bowl"], single_run_callback
|
||||
hass, ["light.Bowl"], single_run_callback, job_type=ha.HassJobType.Callback
|
||||
)
|
||||
unsub_multi = async_track_state_change_event(
|
||||
hass, ["light.Bowl", "switch.kitchen"], multiple_run_callback
|
||||
@ -560,7 +560,9 @@ async def test_async_track_state_added_domain(hass: HomeAssistant) -> None:
|
||||
def callback_that_throws(event):
|
||||
raise ValueError
|
||||
|
||||
unsub_single = async_track_state_added_domain(hass, "light", single_run_callback)
|
||||
unsub_single = async_track_state_added_domain(
|
||||
hass, "light", single_run_callback, job_type=ha.HassJobType.Callback
|
||||
)
|
||||
unsub_multi = async_track_state_added_domain(
|
||||
hass, ["light", "switch"], multiple_run_callback
|
||||
)
|
||||
@ -672,7 +674,9 @@ async def test_async_track_state_removed_domain(hass: HomeAssistant) -> None:
|
||||
def callback_that_throws(event):
|
||||
raise ValueError
|
||||
|
||||
unsub_single = async_track_state_removed_domain(hass, "light", single_run_callback)
|
||||
unsub_single = async_track_state_removed_domain(
|
||||
hass, "light", single_run_callback, job_type=ha.HassJobType.Callback
|
||||
)
|
||||
unsub_multi = async_track_state_removed_domain(
|
||||
hass, ["light", "switch"], multiple_run_callback
|
||||
)
|
||||
@ -4602,7 +4606,9 @@ async def test_async_track_entity_registry_updated_event(hass: HomeAssistant) ->
|
||||
def run_callback(event):
|
||||
event_data.append(event.data)
|
||||
|
||||
unsub1 = async_track_entity_registry_updated_event(hass, entity_id, run_callback)
|
||||
unsub1 = async_track_entity_registry_updated_event(
|
||||
hass, entity_id, run_callback, job_type=ha.HassJobType.Callback
|
||||
)
|
||||
unsub2 = async_track_entity_registry_updated_event(
|
||||
hass, new_entity_id, run_callback
|
||||
)
|
||||
@ -4721,7 +4727,10 @@ async def test_async_track_device_registry_updated_event(hass: HomeAssistant) ->
|
||||
hass, device_id, single_device_id_callback
|
||||
)
|
||||
unsub2 = async_track_device_registry_updated_event(
|
||||
hass, [device_id, device_id2], multiple_device_id_callback
|
||||
hass,
|
||||
[device_id, device_id2],
|
||||
multiple_device_id_callback,
|
||||
job_type=ha.HassJobType.Callback,
|
||||
)
|
||||
hass.bus.async_fire(
|
||||
EVENT_DEVICE_REGISTRY_UPDATED, {"action": "create", "device_id": device_id}
|
||||
|
Loading…
x
Reference in New Issue
Block a user