Skip to content

Commit 54bdf64

Browse files
committed
wip
1 parent 32ac983 commit 54bdf64

File tree

10 files changed

+742
-160
lines changed

10 files changed

+742
-160
lines changed

scheduler/admin/task_admin.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ class TaskAdmin(admin.ModelAdmin):
3232
"""TaskAdmin admin view for all task models."""
3333

3434
class Media:
35-
js = ("admin/js/jquery.init.js", "admin/js/select-fields.js",)
35+
js = (
36+
"admin/js/jquery.init.js",
37+
"admin/js/select-fields.js",
38+
)
3639

3740
save_on_top = True
3841
change_form_template = "admin/scheduler/change_form.html"
@@ -90,7 +93,8 @@ class Media:
9093
(
9194
None,
9295
dict(fields=("cron_string",), classes=("tasktype-CronTask",)),
93-
), (
96+
),
97+
(
9498
None,
9599
dict(fields=("interval", "interval_unit", "repeat"), classes=("tasktype-RepeatableTask",)),
96100
),

scheduler/migrations/0019_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Generated by Django 5.1.2 on 2024-10-15 14:56
1+
# Generated by Django 5.1.2 on 2024-10-15 22:39
22

33
import scheduler.models.task
44
from django.db import migrations, models
@@ -148,7 +148,7 @@ class Migration(migrations.Migration):
148148
verbose_name="repeat",
149149
),
150150
),
151-
("scheduled_time", models.DateTimeField(verbose_name="scheduled time")),
151+
("scheduled_time", models.DateTimeField(blank=True, null=True, verbose_name="scheduled time")),
152152
(
153153
"cron_string",
154154
models.CharField(

scheduler/models/task.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from scheduler.rq_classes import DjangoQueue
2525
from scheduler.settings import QUEUES
2626
from scheduler.settings import logger
27+
from scheduler.tools import TaskType
2728

2829
SCHEDULER_INTERVAL = settings.SCHEDULER_CONFIG.SCHEDULER_INTERVAL
2930

@@ -64,12 +65,6 @@ def get_queue_choices():
6465
return [(queue, queue) for queue in QUEUES.keys()]
6566

6667

67-
class TaskType(models.TextChoices):
68-
CRON = "CronTask", _("Cron Task")
69-
REPEATABLE = "RepeatableTask", _("Repeatable Task")
70-
ONCE = "OnceTask", _("Run once")
71-
72-
7368
class Task(models.Model):
7469
class TimeUnits(models.TextChoices):
7570
SECONDS = "seconds", _("seconds")
@@ -164,7 +159,7 @@ class TimeUnits(models.TextChoices):
164159
null=True,
165160
help_text=_("Number of times to run the job. Leaving this blank means it will run forever."),
166161
)
167-
scheduled_time = models.DateTimeField(_("scheduled time"))
162+
scheduled_time = models.DateTimeField(_("scheduled time"), blank=True, null=True)
168163
cron_string = models.CharField(
169164
_("cron string"),
170165
max_length=64,

scheduler/tests/test_cron_task.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,30 @@
44
from scheduler.models import CronTask
55
from scheduler.tools import create_worker
66
from .test_old_models import BaseTestCases
7-
from .testtools import task_factory
7+
from .testtools import old_task_factory
88
from ..queues import get_queue
99

1010

1111
class TestCronTask(BaseTestCases.TestBaseTask):
1212
TaskModelClass = CronTask
1313

1414
def test_clean(self):
15-
task = task_factory(CronTask)
15+
task = old_task_factory(CronTask)
1616
task.cron_string = "* * * * *"
1717
task.queue = list(settings.QUEUES)[0]
1818
task.callable = "scheduler.tests.jobs.test_job"
1919
self.assertIsNone(task.clean())
2020

2121
def test_clean_cron_string_invalid(self):
22-
task = task_factory(CronTask)
22+
task = old_task_factory(CronTask)
2323
task.cron_string = "not-a-cron-string"
2424
task.queue = list(settings.QUEUES)[0]
2525
task.callable = "scheduler.tests.jobs.test_job"
2626
with self.assertRaises(ValidationError):
2727
task.clean_cron_string()
2828

2929
def test_check_rescheduled_after_execution(self):
30-
task = task_factory(
30+
task = old_task_factory(
3131
CronTask,
3232
)
3333
queue = task.rqueue
@@ -43,7 +43,7 @@ def test_check_rescheduled_after_execution(self):
4343
self.assertNotEqual(task.job_id, first_run_id)
4444

4545
def test_check_rescheduled_after_failed_execution(self):
46-
task = task_factory(
46+
task = old_task_factory(
4747
CronTask,
4848
callable_name="scheduler.tests.jobs.scheduler.tests.jobs.test_job",
4949
)
@@ -63,7 +63,7 @@ def test_cron_task_enqueuing_jobs(self):
6363
queue = get_queue()
6464
prev_queued = len(queue.scheduled_job_registry)
6565
prev_finished = len(queue.finished_job_registry)
66-
task = task_factory(CronTask, callable_name="scheduler.tests.jobs.enqueue_jobs")
66+
task = old_task_factory(CronTask, callable_name="scheduler.tests.jobs.enqueue_jobs")
6767
self.assertEqual(prev_queued + 1, len(queue.scheduled_job_registry))
6868
first_run_id = task.job_id
6969
entry = queue.fetch_job(first_run_id)

scheduler/tests/test_internals.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
from django.utils import timezone
44

5-
from scheduler.models import ScheduledTask
5+
from scheduler.models.task import TaskType
66
from scheduler.tests.testtools import SchedulerBaseCase, task_factory
77
from scheduler.tools import get_scheduled_task
88

99

1010
class TestInternals(SchedulerBaseCase):
1111
def test_get_scheduled_job(self):
12-
task = task_factory(ScheduledTask, scheduled_time=timezone.now() - timedelta(hours=1))
13-
self.assertEqual(task, get_scheduled_task(task.task_type, task.id))
12+
task = task_factory(TaskType.ONCE, scheduled_time=timezone.now() - timedelta(hours=1))
13+
self.assertEqual(task, get_scheduled_task(TaskType.ONCE, task.id))
1414
with self.assertRaises(ValueError):
1515
get_scheduled_task(task.task_type, task.id + 1)
1616
with self.assertRaises(ValueError):

0 commit comments

Comments
 (0)