mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Prevent time pattern reschedule if cancelled during job execution (#117879)
Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
parent
40fdc840ab
commit
eb76386c68
@ -1776,7 +1776,6 @@ class _TrackUTCTimeChange:
|
||||
# time when the timer was scheduled
|
||||
utc_now = time_tracker_utcnow()
|
||||
localized_now = dt_util.as_local(utc_now) if self.local else utc_now
|
||||
hass.async_run_hass_job(self.job, localized_now, background=True)
|
||||
if TYPE_CHECKING:
|
||||
assert self._pattern_time_change_listener_job is not None
|
||||
self._cancel_callback = async_track_point_in_utc_time(
|
||||
@ -1784,6 +1783,7 @@ class _TrackUTCTimeChange:
|
||||
self._pattern_time_change_listener_job,
|
||||
self._calculate_next(utc_now + timedelta(seconds=1)),
|
||||
)
|
||||
hass.async_run_hass_job(self.job, localized_now, background=True)
|
||||
|
||||
@callback
|
||||
def async_cancel(self) -> None:
|
||||
|
@ -4589,6 +4589,40 @@ async def test_async_track_point_in_time_cancel(hass: HomeAssistant) -> None:
|
||||
assert "US/Hawaii" in str(times[0].tzinfo)
|
||||
|
||||
|
||||
async def test_async_track_point_in_time_cancel_in_job(
|
||||
hass: HomeAssistant, freezer: FrozenDateTimeFactory
|
||||
) -> None:
|
||||
"""Test cancel of async track point in time during job execution."""
|
||||
|
||||
now = dt_util.utcnow()
|
||||
times = []
|
||||
|
||||
time_that_will_not_match_right_away = datetime(
|
||||
now.year + 1, 5, 24, 11, 59, 55, tzinfo=dt_util.UTC
|
||||
)
|
||||
freezer.move_to(time_that_will_not_match_right_away)
|
||||
|
||||
@callback
|
||||
def action(x: datetime):
|
||||
nonlocal times
|
||||
times.append(x)
|
||||
unsub()
|
||||
|
||||
unsub = async_track_utc_time_change(hass, action, minute=0, second="*")
|
||||
|
||||
async_fire_time_changed(
|
||||
hass, datetime(now.year + 1, 5, 24, 12, 0, 0, 999999, tzinfo=dt_util.UTC)
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert len(times) == 1
|
||||
|
||||
async_fire_time_changed(
|
||||
hass, datetime(now.year + 1, 5, 24, 13, 0, 0, 999999, tzinfo=dt_util.UTC)
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert len(times) == 1
|
||||
|
||||
|
||||
async def test_async_track_entity_registry_updated_event(hass: HomeAssistant) -> None:
|
||||
"""Test tracking entity registry updates for an entity_id."""
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user