Skip to content

Commit 5af62fe

Browse files
Donbur4156pre-commit-ci[bot]LordOfPolls
authored
fix OrTrigger fire endless (#1438)
* fix ortrigger fire endless setting "last_call_time" in _fire() change it for the OrTrigger but not for the relevant Triggers. the function set_last_call_time() set it for normal Trigger and in case of OrTrigger to the "current_trigger". The current_trigger is the trigger for which triggers next. * ci: correct from checks. * Update return statement Co-authored-by: LordOfPolls <dev@lordofpolls.com> Signed-off-by: Donbur4156 <janpfister@t-online.de> --------- Signed-off-by: Donbur4156 <janpfister@t-online.de> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: LordOfPolls <dev@lordofpolls.com>
1 parent 86e9d2b commit 5af62fe

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

interactions/models/internal/tasks/task.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ async def __call__(self) -> None:
8989

9090
def _fire(self, fire_time: datetime) -> None:
9191
"""Called when the task is being fired."""
92-
self.trigger.last_call_time = fire_time
92+
self.trigger.set_last_call_time(fire_time)
9393
_ = asyncio.create_task(self())
9494
self.iteration += 1
9595

interactions/models/internal/tasks/triggers.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ def reschedule(self) -> None:
1919
"""Update the last call time to now"""
2020
self.last_call_time = datetime.now()
2121

22+
def set_last_call_time(self, call_time: datetime) -> None:
23+
self.last_call_time = call_time
24+
2225
@abstractmethod
2326
def next_fire(self) -> datetime | None:
2427
"""
@@ -114,6 +117,10 @@ class OrTrigger(BaseTrigger):
114117

115118
def __init__(self, *trigger: BaseTrigger) -> None:
116119
self.triggers: list[BaseTrigger] = list(trigger)
120+
self.current_trigger: BaseTrigger = None
121+
122+
def set_last_call_time(self, call_time: datetime) -> None:
123+
self.current_trigger.last_call_time = call_time
117124

118125
def _get_delta(self, d: BaseTrigger) -> timedelta:
119126
next_fire = d.next_fire()
@@ -123,8 +130,9 @@ def __or__(self, other: "BaseTrigger") -> "OrTrigger":
123130
self.triggers.append(other)
124131
return self
125132

133+
def _set_current_trigger(self) -> BaseTrigger | None:
134+
self.current_trigger = self.triggers[0] if len(self.triggers) == 1 else min(self.triggers, key=self._get_delta)
135+
return self.current_trigger
136+
126137
def next_fire(self) -> datetime | None:
127-
if len(self.triggers) == 1:
128-
return self.triggers[0].next_fire()
129-
trigger = min(self.triggers, key=self._get_delta)
130-
return trigger.next_fire()
138+
return self.current_trigger.next_fire() if self._set_current_trigger() else None

0 commit comments

Comments
 (0)