diff --git a/homeassistant/helpers/event.py b/homeassistant/helpers/event.py index b109ce16698..f9c2e47dc96 100644 --- a/homeassistant/helpers/event.py +++ b/homeassistant/helpers/event.py @@ -1106,6 +1106,24 @@ class TrackTemplateResultInfo: return result_as_boolean(result) + @callback + def _apply_update( + self, + updates: list[TrackTemplateResult], + update: bool | TrackTemplateResult, + template: Template, + ) -> bool: + """Handle updates of a tracked template.""" + if not update: + return False + + self._setup_time_listener(template, self._info[template].has_time) + + if isinstance(update, TrackTemplateResult): + updates.append(update) + + return True + @callback def _refresh( self, @@ -1129,20 +1147,6 @@ class TrackTemplateResultInfo: info_changed = False now = event.time_fired if not replayed and event else dt_util.utcnow() - def _apply_update( - update: bool | TrackTemplateResult, template: Template - ) -> bool: - """Handle updates of a tracked template.""" - if not update: - return False - - self._setup_time_listener(template, self._info[template].has_time) - - if isinstance(update, TrackTemplateResult): - updates.append(update) - - return True - block_updates = False super_template = self._track_templates[0] if self._has_super_template else None @@ -1151,7 +1155,7 @@ class TrackTemplateResultInfo: # Update the super template first if super_template is not None: update = self._render_template_if_ready(super_template, now, event) - info_changed |= _apply_update(update, super_template.template) + info_changed |= self._apply_update(updates, update, super_template.template) if isinstance(update, TrackTemplateResult): super_result = update.result @@ -1182,7 +1186,9 @@ class TrackTemplateResultInfo: continue update = self._render_template_if_ready(track_template_, now, event) - info_changed |= _apply_update(update, track_template_.template) + info_changed |= self._apply_update( + updates, update, track_template_.template + ) if info_changed: assert self._track_state_changes diff --git a/homeassistant/helpers/ratelimit.py b/homeassistant/helpers/ratelimit.py index b2a93e7302f..12a4cfac406 100644 --- a/homeassistant/helpers/ratelimit.py +++ b/homeassistant/helpers/ratelimit.py @@ -30,9 +30,7 @@ class KeyedRateLimit: @callback def async_has_timer(self, key: Hashable) -> bool: """Check if a rate limit timer is running.""" - if not self._rate_limit_timers: - return False - return key in self._rate_limit_timers + return bool(self._rate_limit_timers and key in self._rate_limit_timers) @callback def async_triggered(self, key: Hashable, now: datetime | None = None) -> None: @@ -43,7 +41,7 @@ class KeyedRateLimit: @callback def async_cancel_timer(self, key: Hashable) -> None: """Cancel a rate limit time that will call the action.""" - if not self._rate_limit_timers or not self.async_has_timer(key): + if not self._rate_limit_timers or key not in self._rate_limit_timers: return self._rate_limit_timers.pop(key).cancel()