Don't crash when firing event for timer for unregistered device (#118132)
parent
6697cf07a6
commit
4a3808c08e
|
@ -292,7 +292,8 @@ class TimerManager:
|
|||
|
||||
timer.cancel()
|
||||
|
||||
self.handlers[timer.device_id](TimerEventType.CANCELLED, timer)
|
||||
if timer.device_id in self.handlers:
|
||||
self.handlers[timer.device_id](TimerEventType.CANCELLED, timer)
|
||||
_LOGGER.debug(
|
||||
"Timer cancelled: id=%s, name=%s, seconds_left=%s, device_id=%s",
|
||||
timer_id,
|
||||
|
@ -320,7 +321,8 @@ class TimerManager:
|
|||
name=f"Timer {timer_id}",
|
||||
)
|
||||
|
||||
self.handlers[timer.device_id](TimerEventType.UPDATED, timer)
|
||||
if timer.device_id in self.handlers:
|
||||
self.handlers[timer.device_id](TimerEventType.UPDATED, timer)
|
||||
|
||||
if seconds > 0:
|
||||
log_verb = "increased"
|
||||
|
@ -357,7 +359,8 @@ class TimerManager:
|
|||
task = self.timer_tasks.pop(timer_id)
|
||||
task.cancel()
|
||||
|
||||
self.handlers[timer.device_id](TimerEventType.UPDATED, timer)
|
||||
if timer.device_id in self.handlers:
|
||||
self.handlers[timer.device_id](TimerEventType.UPDATED, timer)
|
||||
_LOGGER.debug(
|
||||
"Timer paused: id=%s, name=%s, seconds_left=%s, device_id=%s",
|
||||
timer_id,
|
||||
|
@ -382,7 +385,8 @@ class TimerManager:
|
|||
name=f"Timer {timer.id}",
|
||||
)
|
||||
|
||||
self.handlers[timer.device_id](TimerEventType.UPDATED, timer)
|
||||
if timer.device_id in self.handlers:
|
||||
self.handlers[timer.device_id](TimerEventType.UPDATED, timer)
|
||||
_LOGGER.debug(
|
||||
"Timer unpaused: id=%s, name=%s, seconds_left=%s, device_id=%s",
|
||||
timer_id,
|
||||
|
@ -397,7 +401,8 @@ class TimerManager:
|
|||
|
||||
timer.finish()
|
||||
|
||||
self.handlers[timer.device_id](TimerEventType.FINISHED, timer)
|
||||
if timer.device_id in self.handlers:
|
||||
self.handlers[timer.device_id](TimerEventType.FINISHED, timer)
|
||||
_LOGGER.debug(
|
||||
"Timer finished: id=%s, name=%s, device_id=%s",
|
||||
timer_id,
|
||||
|
|
|
@ -971,6 +971,36 @@ async def test_timers_not_supported(hass: HomeAssistant) -> None:
|
|||
language=hass.config.language,
|
||||
)
|
||||
|
||||
# Start a timer
|
||||
@callback
|
||||
def handle_timer(event_type: TimerEventType, timer: TimerInfo) -> None:
|
||||
pass
|
||||
|
||||
device_id = "test_device"
|
||||
unregister = timer_manager.register_handler(device_id, handle_timer)
|
||||
|
||||
timer_id = timer_manager.start_timer(
|
||||
device_id,
|
||||
hours=None,
|
||||
minutes=5,
|
||||
seconds=None,
|
||||
language=hass.config.language,
|
||||
)
|
||||
|
||||
# Unregister handler so device no longer "supports" timers
|
||||
unregister()
|
||||
|
||||
# All operations on the timer should not crash
|
||||
timer_manager.add_time(timer_id, 1)
|
||||
|
||||
timer_manager.remove_time(timer_id, 1)
|
||||
|
||||
timer_manager.pause_timer(timer_id)
|
||||
|
||||
timer_manager.unpause_timer(timer_id)
|
||||
|
||||
timer_manager.cancel_timer(timer_id)
|
||||
|
||||
|
||||
async def test_timer_status_with_names(hass: HomeAssistant, init_components) -> None:
|
||||
"""Test getting the status of named timers."""
|
||||
|
|
Loading…
Reference in New Issue