Remove clear finished and cancel all

This commit is contained in:
Michael Hansen
2026-07-20 11:16:16 -05:00
parent 89c88ce2f0
commit c3b9815fe2
8 changed files with 0 additions and 114 deletions
@@ -112,16 +112,6 @@ class LocalTimerListEntity(TimerListEntity):
self._notify(TimerListEventType.CANCELLED, timer)
self._enforce_archive_limit()
@override
async def async_cancel_all_timers(self) -> None:
"""Cancel every active or paused timer."""
for timer_id in [
timer.timer_id
for timer in self._timers.values()
if timer.status in (TimerStatus.ACTIVE, TimerStatus.PAUSED)
]:
await self.async_cancel_timer(timer_id)
@override
async def async_add_time(self, timer_id: str, duration: timedelta) -> None:
"""Add (or, with a negative duration, remove) time on a timer."""
@@ -149,17 +139,6 @@ class LocalTimerListEntity(TimerListEntity):
del self._timers[timer_id]
self._notify(TimerListEventType.REMOVED, timer)
@override
async def async_clear_finished_timers(self) -> None:
"""Remove all finished and cancelled (archived) timers."""
for timer_id in [
timer.timer_id
for timer in self._timers.values()
if timer.status in _FINISHED_STATUSES
]:
timer = self._timers.pop(timer_id)
self._notify(TimerListEventType.REMOVED, timer)
def _get_timer(self, timer_id: str) -> TimerItem:
"""Return a timer by id or raise if it does not exist."""
if (timer := self._timers.get(timer_id)) is None:
@@ -149,12 +149,6 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
"async_cancel_timer",
required_features=[TimerListEntityFeature.CANCEL_TIMER],
)
component.async_register_entity_service(
TimerListServices.CANCEL_ALL_TIMERS,
None,
"async_cancel_all_timers",
required_features=[TimerListEntityFeature.CANCEL_TIMER],
)
component.async_register_entity_service(
TimerListServices.ADD_TIME,
{
@@ -178,11 +172,6 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
{vol.Required(ATTR_TIMER_ID): cv.string},
"async_remove_timer",
)
component.async_register_entity_service(
TimerListServices.CLEAR_FINISHED_TIMERS,
None,
"async_clear_finished_timers",
)
component.async_register_entity_service(
TimerListServices.GET_TIMERS,
{vol.Optional(ATTR_STATUS): vol.All(cv.ensure_list, [vol.Coerce(TimerStatus)])},
@@ -245,10 +234,6 @@ class TimerListEntity(Entity):
"""Cancel a timer."""
raise NotImplementedError
async def async_cancel_all_timers(self) -> None:
"""Cancel every active or paused timer."""
raise NotImplementedError
async def async_add_time(self, timer_id: str, duration: timedelta) -> None:
"""Add (or, with a negative duration, remove) time on a timer."""
raise NotImplementedError
@@ -257,10 +242,6 @@ class TimerListEntity(Entity):
"""Remove a timer from the list regardless of its status."""
raise NotImplementedError
async def async_clear_finished_timers(self) -> None:
"""Remove all finished and cancelled (archived) timers."""
raise NotImplementedError
@final
@callback
def async_subscribe_updates(
@@ -31,11 +31,9 @@ class TimerListServices(StrEnum):
PAUSE_TIMER = "pause_timer"
UNPAUSE_TIMER = "unpause_timer"
CANCEL_TIMER = "cancel_timer"
CANCEL_ALL_TIMERS = "cancel_all_timers"
ADD_TIME = "add_time"
REMOVE_TIME = "remove_time"
REMOVE_TIMER = "remove_timer"
CLEAR_FINISHED_TIMERS = "clear_finished_timers"
GET_TIMERS = "get_timers"
@@ -8,15 +8,9 @@
"add_time": {
"service": "mdi:timer-plus-outline"
},
"cancel_all_timers": {
"service": "mdi:timer-cancel-outline"
},
"cancel_timer": {
"service": "mdi:timer-cancel-outline"
},
"clear_finished_timers": {
"service": "mdi:timer-remove-outline"
},
"get_timers": {
"service": "mdi:timer-outline"
},
@@ -50,12 +50,6 @@ cancel_timer:
example: "01HZ8ABCDEF0123456789ABCDE"
selector:
text:
cancel_all_timers:
target:
entity:
domain: timer_list
supported_features:
- timer_list.TimerListEntityFeature.CANCEL_TIMER
add_time:
target:
entity:
@@ -100,10 +94,6 @@ remove_timer:
example: "01HZ8ABCDEF0123456789ABCDE"
selector:
text:
clear_finished_timers:
target:
entity:
domain: timer_list
get_timers:
target:
entity:
@@ -34,10 +34,6 @@
},
"name": "Add time"
},
"cancel_all_timers": {
"description": "Cancels every active and paused timer on a timer list.",
"name": "Cancel all timers"
},
"cancel_timer": {
"description": "Cancels a timer.",
"fields": {
@@ -48,10 +44,6 @@
},
"name": "Cancel timer"
},
"clear_finished_timers": {
"description": "Removes all finished and cancelled timers from a timer list.",
"name": "Clear finished timers"
},
"get_timers": {
"description": "Gets the timers on a timer list.",
"fields": {
-21
View File
@@ -115,16 +115,6 @@ class MockTimerListEntity(TimerListEntity):
self._notify(TimerListEventType.CANCELLED, timer)
self._enforce_archive_limit()
@override
async def async_cancel_all_timers(self) -> None:
"""Cancel every active or paused timer."""
for timer_id in [
timer.timer_id
for timer in self._timers.values()
if timer.status in (TimerStatus.ACTIVE, TimerStatus.PAUSED)
]:
await self.async_cancel_timer(timer_id)
@override
async def async_add_time(self, timer_id: str, duration: timedelta) -> None:
"""Add (or, with a negative duration, remove) time on a timer."""
@@ -152,17 +142,6 @@ class MockTimerListEntity(TimerListEntity):
del self._timers[timer_id]
self._notify(TimerListEventType.REMOVED, timer)
@override
async def async_clear_finished_timers(self) -> None:
"""Remove all finished and cancelled (archived) timers."""
for timer_id in [
timer.timer_id
for timer in self._timers.values()
if timer.status in _FINISHED_STATUSES
]:
timer = self._timers.pop(timer_id)
self._notify(TimerListEventType.REMOVED, timer)
def _get_timer(self, timer_id: str) -> TimerItem:
"""Return a timer by id or raise if it does not exist."""
if (timer := self._timers.get(timer_id)) is None:
-27
View File
@@ -172,33 +172,6 @@ async def test_cancel_timer_archives_timer(hass: HomeAssistant) -> None:
assert timers[0]["status"] == "cancelled"
@pytest.mark.usefixtures("test_entity")
async def test_cancel_all_timers(hass: HomeAssistant) -> None:
"""Test cancelling all timers archives them."""
await _start_timer(hass)
await _start_timer(hass)
await _call(hass, "cancel_all_timers")
assert hass.states.get(TEST_ENTITY_ID).state == "0"
assert len(await _get_timers(hass)) == 2
@pytest.mark.usefixtures("test_entity")
async def test_clear_finished_timers(hass: HomeAssistant) -> None:
"""Test clearing finished and cancelled timers."""
timer_id = await _start_timer(hass)
await _call(hass, "cancel_timer", timer_id=timer_id)
await _start_timer(hass)
assert len(await _get_timers(hass)) == 2
await _call(hass, "clear_finished_timers")
timers = await _get_timers(hass)
assert len(timers) == 1
assert timers[0]["status"] == "active"
@pytest.mark.usefixtures("test_entity")
async def test_archive_limit_evicts_oldest(
hass: HomeAssistant, freezer: FrozenDateTimeFactory