mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 16:57:53 +00:00
Always do thread safety checks when calling async_fire (#116055)
This commit is contained in:
parent
53a179088f
commit
4a59ee978c
@ -1407,6 +1407,12 @@ class _OneTimeListener(Generic[_DataT]):
|
||||
EMPTY_LIST: list[Any] = []
|
||||
|
||||
|
||||
def _verify_event_type_length_or_raise(event_type: EventType[_DataT] | str) -> None:
|
||||
"""Verify the length of the event type and raise if too long."""
|
||||
if len(event_type) > MAX_LENGTH_EVENT_EVENT_TYPE:
|
||||
raise MaxLengthExceeded(event_type, "event_type", MAX_LENGTH_EVENT_EVENT_TYPE)
|
||||
|
||||
|
||||
class EventBus:
|
||||
"""Allow the firing of and listening for events."""
|
||||
|
||||
@ -1447,8 +1453,9 @@ class EventBus:
|
||||
context: Context | None = None,
|
||||
) -> None:
|
||||
"""Fire an event."""
|
||||
_verify_event_type_length_or_raise(event_type)
|
||||
self._hass.loop.call_soon_threadsafe(
|
||||
self.async_fire, event_type, event_data, origin, context
|
||||
self.async_fire_internal, event_type, event_data, origin, context
|
||||
)
|
||||
|
||||
@callback
|
||||
@ -1464,13 +1471,8 @@ class EventBus:
|
||||
|
||||
This method must be run in the event loop.
|
||||
"""
|
||||
if self._hass.config.debug:
|
||||
self._hass.verify_event_loop_thread("async_fire")
|
||||
|
||||
if len(event_type) > MAX_LENGTH_EVENT_EVENT_TYPE:
|
||||
raise MaxLengthExceeded(
|
||||
event_type, "event_type", MAX_LENGTH_EVENT_EVENT_TYPE
|
||||
)
|
||||
_verify_event_type_length_or_raise(event_type)
|
||||
self._hass.verify_event_loop_thread("async_fire")
|
||||
return self.async_fire_internal(
|
||||
event_type, event_data, origin, context, time_fired
|
||||
)
|
||||
|
@ -3449,8 +3449,6 @@ async def test_debug_mode_defaults_to_off(hass: HomeAssistant) -> None:
|
||||
|
||||
async def test_async_fire_thread_safety(hass: HomeAssistant) -> None:
|
||||
"""Test async_fire thread safety."""
|
||||
hass.config.debug = True
|
||||
|
||||
events = async_capture_events(hass, "test_event")
|
||||
hass.bus.async_fire("test_event")
|
||||
with pytest.raises(
|
||||
|
Loading…
x
Reference in New Issue
Block a user