Pass job type to event listeners when creating entities (#112551)

This commit is contained in:
J. Nick Koston 2024-03-06 16:10:07 -10:00 committed by GitHub
parent 84455dbe1d
commit a7b4cd3512
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 44 additions and 22 deletions

View File

@ -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

View File

@ -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

View File

@ -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}