Calculate the delta to add instead of looping

This commit is contained in:
tcely
2025-05-26 22:11:14 -04:00
committed by GitHub
parent ec913485a3
commit 4df84b37cf

View File

@@ -389,10 +389,12 @@ class Source(db.models.Model):
when = now.replace(minute=0, second=0, microsecond=0)
def advance_hour(arg_dt, target_hour, /):
dt = arg_dt
while dt.hour != target_hour:
dt += timezone.timedelta(hours=1)
return dt
delta_hours = ((24 + target_hour) - arg_dt.hour) % 24
return arg_dt + timezone.timedelta(hours=delta_hours)
def advance_day(arg_dt, target_weekday, /):
delta_days = ((7 + target_weekday) - arg_dt.weekday) % 7
return arg_dt + timezone.timedelta(days=delta_days)
if self.target_schedule is None:
self.target_schedule = when
@@ -410,8 +412,7 @@ class Source(db.models.Model):
return self.target_schedule
when = advance_hour(when, self.target_schedule.hour)
while when.weekday != self.target_schedule.weekday:
when += timezone.timedelta(days=1)
when = advance_day(when, self.target_schedule.weekday)
self.target_schedule = when
return when