Skip to content

Commit 5267710

Browse files
committed
Fix #202
1 parent 8fbc4b8 commit 5267710

File tree

6 files changed

+45
-56
lines changed

6 files changed

+45
-56
lines changed

scheduler/models/old_scheduled_task.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def rqueue(self) -> DjangoQueue:
201201
"""Returns django-queue for job"""
202202
return get_queue(self.queue)
203203

204-
def ready_for_schedule(self) -> bool:
204+
def _ready_for_schedule(self) -> bool:
205205
"""Is the task ready to be scheduled?
206206
207207
If the task is already scheduled or disabled, then it is not
@@ -217,11 +217,11 @@ def ready_for_schedule(self) -> bool:
217217
return False
218218
return True
219219

220-
def schedule(self) -> bool:
220+
def _schedule(self) -> bool:
221221
"""Schedule the next execution for the task to run.
222222
:returns: True if a job was scheduled, False otherwise.
223223
"""
224-
if not self.ready_for_schedule():
224+
if not self._ready_for_schedule():
225225
return False
226226
schedule_time = self._schedule_time()
227227
kwargs = self._enqueue_args()
@@ -323,7 +323,7 @@ def save(self, **kwargs):
323323
kwargs["update_fields"] = set(update_fields).union({"modified"})
324324
super(BaseTask, self).save(**kwargs)
325325
if schedule_job:
326-
self.schedule()
326+
self._schedule()
327327
super(BaseTask, self).save()
328328

329329
def delete(self, **kwargs):
@@ -395,8 +395,8 @@ class Meta:
395395
class ScheduledTask(ScheduledTimeMixin, BaseTask):
396396
task_type = "ScheduledTask"
397397

398-
def ready_for_schedule(self) -> bool:
399-
return super(ScheduledTask, self).ready_for_schedule() and (
398+
def _ready_for_schedule(self) -> bool:
399+
return super(ScheduledTask, self)._ready_for_schedule() and (
400400
self.scheduled_time is None or self.scheduled_time >= timezone.now()
401401
)
402402

@@ -486,8 +486,8 @@ def _schedule_time(self):
486486
self.repeat = (self.repeat - gap) if self.repeat is not None else None
487487
return super()._schedule_time()
488488

489-
def ready_for_schedule(self):
490-
if super(RepeatableTask, self).ready_for_schedule() is False:
489+
def _ready_for_schedule(self):
490+
if super(RepeatableTask, self)._ready_for_schedule() is False:
491491
return False
492492
if self._schedule_time() < timezone.now():
493493
return False

scheduler/models/task.py

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -253,42 +253,6 @@ def rqueue(self) -> DjangoQueue:
253253
"""Returns django-queue for job"""
254254
return get_queue(self.queue)
255255

256-
def ready_for_schedule(self) -> bool:
257-
"""Is the task ready to be scheduled?
258-
259-
If the task is already scheduled or disabled, then it is not
260-
ready to be scheduled.
261-
262-
:returns: True if the task is ready to be scheduled.
263-
"""
264-
if self.is_scheduled():
265-
logger.debug(f"Task {self.name} already scheduled")
266-
return False
267-
if not self.enabled:
268-
logger.debug(f"Task {str(self)} disabled, enable task before scheduling")
269-
return False
270-
if self.task_type in {TaskType.REPEATABLE, TaskType.ONCE} and self._schedule_time() < timezone.now():
271-
return False
272-
return True
273-
274-
def schedule(self) -> bool:
275-
"""Schedule the next execution for the task to run.
276-
:returns: True if a job was scheduled, False otherwise.
277-
"""
278-
if not self.ready_for_schedule():
279-
return False
280-
schedule_time = self._schedule_time()
281-
kwargs = self._enqueue_args()
282-
job = self.rqueue.enqueue_at(
283-
schedule_time,
284-
tools.run_task,
285-
args=(self.task_type, self.id),
286-
**kwargs,
287-
)
288-
self.job_id = job.id
289-
super(Task, self).save()
290-
return True
291-
292256
def enqueue_to_run(self) -> bool:
293257
"""Enqueue task to run now."""
294258
kwargs = self._enqueue_args()
@@ -380,14 +344,39 @@ def __str__(self):
380344
func = self.function_string()
381345
return f"{self.task_type}[{self.name}={func}]"
382346

347+
def _schedule(self) -> bool:
348+
"""Schedule the next execution for the task to run.
349+
:returns: True if a job was scheduled, False otherwise.
350+
"""
351+
self.refresh_from_db()
352+
if self.is_scheduled():
353+
logger.debug(f"Task {self.name} already scheduled")
354+
return False
355+
if not self.enabled:
356+
logger.debug(f"Task {str(self)} disabled, enable task before scheduling")
357+
return False
358+
if self.task_type in {TaskType.REPEATABLE, TaskType.ONCE} and self._schedule_time() < timezone.now():
359+
return False
360+
schedule_time = self._schedule_time()
361+
kwargs = self._enqueue_args()
362+
job = self.rqueue.enqueue_at(
363+
schedule_time,
364+
tools.run_task,
365+
args=(self.task_type, self.id),
366+
**kwargs,
367+
)
368+
self.job_id = job.id
369+
super(Task, self).save()
370+
return True
371+
383372
def save(self, **kwargs):
384373
schedule_job = kwargs.pop("schedule_job", True)
385374
update_fields = kwargs.get("update_fields", None)
386375
if update_fields is not None:
387376
kwargs["update_fields"] = set(update_fields).union({"modified"})
388377
super(Task, self).save(**kwargs)
389378
if schedule_job:
390-
self.schedule()
379+
self._schedule()
391380
super(Task, self).save()
392381

393382
def delete(self, **kwargs):

scheduler/tests/test_old_models/test_old_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def test_is_schedulable_already_scheduled(self):
9696
task = old_task_factory(
9797
self.TaskModelClass,
9898
)
99-
task.schedule()
99+
task._schedule()
100100
self.assertTrue(task.is_scheduled())
101101

102102
def test_is_schedulable_disabled(self):
@@ -151,7 +151,7 @@ def test_schedule2(self):
151151
task.queue = list(settings.QUEUES)[0]
152152
task.enabled = False
153153
task.scheduled_time = timezone.now() + timedelta(minutes=1)
154-
self.assertFalse(task.schedule())
154+
self.assertFalse(task._schedule())
155155

156156
def test_delete_and_unschedule(self):
157157
task = old_task_factory(

scheduler/tests/test_old_models/test_old_repeatable_task.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ def test_repeat_none_interval_2_min(self):
153153
task = old_task_factory(self.TaskModelClass, scheduled_time=base_time - timedelta(minutes=29), repeat=None)
154154
task.interval = 120
155155
task.interval_unit = "seconds"
156-
task.schedule()
156+
task._schedule()
157157
self.assertTrue(task.scheduled_time > base_time)
158158
self.assertTrue(task.is_scheduled())
159159

scheduler/tests/test_task_types/test_repeatable_task.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,12 @@ def test_repeat_old_job_remaining(self):
145145

146146
def test_repeat_none_interval_2_min(self):
147147
base_time = timezone.now()
148-
job = task_factory(self.task_type, scheduled_time=base_time - timedelta(minutes=29), repeat=None)
149-
job.interval = 120
150-
job.interval_unit = "seconds"
151-
job.schedule()
152-
self.assertTrue(job.scheduled_time > base_time)
153-
self.assertTrue(job.is_scheduled())
148+
task = task_factory(self.task_type, scheduled_time=base_time - timedelta(minutes=29), repeat=None)
149+
task.interval = 120
150+
task.interval_unit = "seconds"
151+
task._schedule()
152+
self.assertTrue(task.scheduled_time > base_time)
153+
self.assertTrue(task.is_scheduled())
154154

155155
def test_check_rescheduled_after_execution(self):
156156
task = task_factory(self.task_type, scheduled_time=timezone.now() + timedelta(seconds=1), repeat=10)

scheduler/tests/test_task_types/test_task_model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def test_clean_invalid_queue(self):
9595

9696
def test_is_schedulable_already_scheduled(self):
9797
task = task_factory(self.task_type)
98-
task.schedule()
98+
task._schedule()
9999
self.assertTrue(task.is_scheduled())
100100

101101
def test_is_schedulable_disabled(self):
@@ -144,7 +144,7 @@ def test_schedule2(self):
144144
task.queue = list(settings.QUEUES)[0]
145145
task.enabled = False
146146
task.scheduled_time = timezone.now() + timedelta(minutes=1)
147-
self.assertFalse(task.schedule())
147+
self.assertFalse(task._schedule())
148148

149149
def test_delete_and_unschedule(self):
150150
task = task_factory(self.task_type)

0 commit comments

Comments
 (0)