mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 03:37:07 +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 (
|
from homeassistant.core import (
|
||||||
CALLBACK_TYPE,
|
CALLBACK_TYPE,
|
||||||
Context,
|
Context,
|
||||||
|
HassJobType,
|
||||||
HomeAssistant,
|
HomeAssistant,
|
||||||
callback,
|
callback,
|
||||||
get_release_channel,
|
get_release_channel,
|
||||||
@ -1430,7 +1431,10 @@ class Entity(
|
|||||||
|
|
||||||
self.async_on_remove(
|
self.async_on_remove(
|
||||||
async_track_entity_registry_updated_event(
|
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()
|
self._async_subscribe_device_updates()
|
||||||
@ -1545,6 +1549,7 @@ class Entity(
|
|||||||
self.hass,
|
self.hass,
|
||||||
device_id,
|
device_id,
|
||||||
self._async_device_registry_updated,
|
self._async_device_registry_updated,
|
||||||
|
job_type=HassJobType.Callback,
|
||||||
)
|
)
|
||||||
if (
|
if (
|
||||||
not self._on_remove
|
not self._on_remove
|
||||||
|
@ -299,6 +299,7 @@ def async_track_state_change_event(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entity_ids: str | Iterable[str],
|
entity_ids: str | Iterable[str],
|
||||||
action: Callable[[EventType[EventStateChangedData]], Any],
|
action: Callable[[EventType[EventStateChangedData]], Any],
|
||||||
|
job_type: HassJobType | None = None,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Track specific state change events indexed by entity_id.
|
"""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)):
|
if not (entity_ids := _async_string_to_lower_list(entity_ids)):
|
||||||
return _remove_empty_listener
|
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
|
@callback
|
||||||
@ -361,9 +362,12 @@ def _async_track_state_change_event(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entity_ids: str | Iterable[str],
|
entity_ids: str | Iterable[str],
|
||||||
action: Callable[[EventType[EventStateChangedData]], Any],
|
action: Callable[[EventType[EventStateChangedData]], Any],
|
||||||
|
job_type: HassJobType | None,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""async_track_state_change_event without lowercasing."""
|
"""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
|
@callback
|
||||||
@ -397,6 +401,7 @@ def _async_track_event(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
keys: str | Iterable[str],
|
keys: str | Iterable[str],
|
||||||
action: Callable[[EventType[_TypedDictT]], None],
|
action: Callable[[EventType[_TypedDictT]], None],
|
||||||
|
job_type: HassJobType | None,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Track an event by a specific key.
|
"""Track an event by a specific key.
|
||||||
|
|
||||||
@ -429,7 +434,7 @@ def _async_track_event(
|
|||||||
run_immediately=tracker.run_immediately,
|
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:
|
for key in keys:
|
||||||
if callback_list := callbacks.get(key):
|
if callback_list := callbacks.get(key):
|
||||||
@ -494,6 +499,7 @@ def async_track_entity_registry_updated_event(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entity_ids: str | Iterable[str],
|
entity_ids: str | Iterable[str],
|
||||||
action: Callable[[EventType[EventEntityRegistryUpdatedData]], Any],
|
action: Callable[[EventType[EventEntityRegistryUpdatedData]], Any],
|
||||||
|
job_type: HassJobType | None = None,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Track specific entity registry updated events indexed by entity_id.
|
"""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.
|
Similar to async_track_state_change_event.
|
||||||
"""
|
"""
|
||||||
return _async_track_event(
|
return _async_track_event(
|
||||||
_KEYED_TRACK_ENTITY_REGISTRY_UPDATED,
|
_KEYED_TRACK_ENTITY_REGISTRY_UPDATED, hass, entity_ids, action, job_type
|
||||||
hass,
|
|
||||||
entity_ids,
|
|
||||||
action,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -558,16 +561,14 @@ def async_track_device_registry_updated_event(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
device_ids: str | Iterable[str],
|
device_ids: str | Iterable[str],
|
||||||
action: Callable[[EventType[EventDeviceRegistryUpdatedData]], Any],
|
action: Callable[[EventType[EventDeviceRegistryUpdatedData]], Any],
|
||||||
|
job_type: HassJobType | None = None,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Track specific device registry updated events indexed by device_id.
|
"""Track specific device registry updated events indexed by device_id.
|
||||||
|
|
||||||
Similar to async_track_entity_registry_updated_event.
|
Similar to async_track_entity_registry_updated_event.
|
||||||
"""
|
"""
|
||||||
return _async_track_event(
|
return _async_track_event(
|
||||||
_KEYED_TRACK_DEVICE_REGISTRY_UPDATED,
|
_KEYED_TRACK_DEVICE_REGISTRY_UPDATED, hass, device_ids, action, job_type
|
||||||
hass,
|
|
||||||
device_ids,
|
|
||||||
action,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -606,11 +607,12 @@ def async_track_state_added_domain(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
domains: str | Iterable[str],
|
domains: str | Iterable[str],
|
||||||
action: Callable[[EventType[EventStateChangedData]], Any],
|
action: Callable[[EventType[EventStateChangedData]], Any],
|
||||||
|
job_type: HassJobType | None = None,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Track state change events when an entity is added to domains."""
|
"""Track state change events when an entity is added to domains."""
|
||||||
if not (domains := _async_string_to_lower_list(domains)):
|
if not (domains := _async_string_to_lower_list(domains)):
|
||||||
return _remove_empty_listener
|
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(
|
_KEYED_TRACK_STATE_ADDED_DOMAIN = _KeyedEventTracker(
|
||||||
@ -628,9 +630,12 @@ def _async_track_state_added_domain(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
domains: str | Iterable[str],
|
domains: str | Iterable[str],
|
||||||
action: Callable[[EventType[EventStateChangedData]], Any],
|
action: Callable[[EventType[EventStateChangedData]], Any],
|
||||||
|
job_type: HassJobType | None,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Track state change events when an entity is added to domains."""
|
"""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
|
@callback
|
||||||
@ -661,9 +666,12 @@ def async_track_state_removed_domain(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
domains: str | Iterable[str],
|
domains: str | Iterable[str],
|
||||||
action: Callable[[EventType[EventStateChangedData]], Any],
|
action: Callable[[EventType[EventStateChangedData]], Any],
|
||||||
|
job_type: HassJobType | None = None,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Track state change events when an entity is removed from domains."""
|
"""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
|
@callback
|
||||||
@ -781,7 +789,7 @@ class _TrackStateChangeFiltered:
|
|||||||
return
|
return
|
||||||
|
|
||||||
self._listeners[_ENTITIES_LISTENER] = _async_track_state_change_event(
|
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
|
@callback
|
||||||
@ -798,7 +806,7 @@ class _TrackStateChangeFiltered:
|
|||||||
return
|
return
|
||||||
|
|
||||||
self._listeners[_DOMAINS_LISTENER] = _async_track_state_added_domain(
|
self._listeners[_DOMAINS_LISTENER] = _async_track_state_added_domain(
|
||||||
self.hass, domains, self._state_added
|
self.hass, domains, self._state_added, HassJobType.Callback
|
||||||
)
|
)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
@ -453,7 +453,7 @@ async def test_async_track_state_change_event(hass: HomeAssistant) -> None:
|
|||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
unsub_single = async_track_state_change_event(
|
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(
|
unsub_multi = async_track_state_change_event(
|
||||||
hass, ["light.Bowl", "switch.kitchen"], multiple_run_callback
|
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):
|
def callback_that_throws(event):
|
||||||
raise ValueError
|
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(
|
unsub_multi = async_track_state_added_domain(
|
||||||
hass, ["light", "switch"], multiple_run_callback
|
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):
|
def callback_that_throws(event):
|
||||||
raise ValueError
|
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(
|
unsub_multi = async_track_state_removed_domain(
|
||||||
hass, ["light", "switch"], multiple_run_callback
|
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):
|
def run_callback(event):
|
||||||
event_data.append(event.data)
|
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(
|
unsub2 = async_track_entity_registry_updated_event(
|
||||||
hass, new_entity_id, run_callback
|
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
|
hass, device_id, single_device_id_callback
|
||||||
)
|
)
|
||||||
unsub2 = async_track_device_registry_updated_event(
|
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(
|
hass.bus.async_fire(
|
||||||
EVENT_DEVICE_REGISTRY_UPDATED, {"action": "create", "device_id": device_id}
|
EVENT_DEVICE_REGISTRY_UPDATED, {"action": "create", "device_id": device_id}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user