Skip to content

Commit 321a2a6

Browse files
committed
Remove RQ dependency
1 parent e54d96e commit 321a2a6

File tree

10 files changed

+72
-59
lines changed

10 files changed

+72
-59
lines changed

pyproject.toml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,3 @@ quote-style = "double"
7777
indent-style = "space"
7878
skip-magic-trailing-comma = false
7979
line-ending = "auto"
80-
#
81-
#[tool.coverage]
82-
#
83-
#[tool.coverage.run]
84-
#parallel = true
85-
#omit = [
86-
# "**/scheduler/migrations/*"
87-
#]
88-
#concurrency = ["multiprocessing", "thread"]

scheduler/admin/task_admin.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class Media:
6767
list_display = (
6868
"enabled",
6969
"name",
70-
"job_id",
70+
"job_name",
7171
"function_string",
7272
"is_scheduled",
7373
"queue",
@@ -80,7 +80,7 @@ class Media:
8080
)
8181
list_display_links = ("name",)
8282
readonly_fields = (
83-
"job_id",
83+
"job_name",
8484
"successful_runs",
8585
"last_successful_run",
8686
"failed_runs",
@@ -99,7 +99,7 @@ class Media:
9999
(None, dict(fields=("scheduled_time",), classes=("tasktype-OnceTaskType",)),),
100100
(None, dict(fields=("cron_string",), classes=("tasktype-CronTaskType",)),),
101101
(None, dict(fields=(("interval", "interval_unit",), "repeat"), classes=("tasktype-RepeatableTaskType",)),),
102-
(_("Queue settings"), dict(fields=(("queue", "at_front"), "job_id"))),
102+
(_("Queue settings"), dict(fields=(("queue", "at_front"), "job_name"))),
103103
(_("Previous runs info"),
104104
dict(fields=(("successful_runs", "last_successful_run"), ("failed_runs", "last_failed_run"))),),
105105
)

scheduler/decorators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from functools import wraps
2-
from typing import Any, Callable, Dict, List, Optional, Union
2+
from typing import Any, Callable, Dict, Optional, Union
33

44
from scheduler.broker_types import ConnectionType
55
from scheduler.helpers.callback import Callback
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Generated by Django 5.1.7 on 2025-03-24 14:30
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('scheduler', '0020_remove_repeatabletask_new_task_id_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name='task',
15+
name='job_id',
16+
),
17+
migrations.AddField(
18+
model_name='task',
19+
name='job_name',
20+
field=models.CharField(blank=True, editable=False, help_text='Current job_name on queue', max_length=128, null=True, verbose_name='job name'),
21+
),
22+
]

scheduler/models/task.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def failure_callback(job: JobModel, connection, result, *args, **kwargs):
4444
f"Task {task.id}/{task.name} has failed",
4545
"See django-admin for logs",
4646
)
47-
task.job_id = None
47+
task.job_name = None
4848
task.failed_runs += 1
4949
task.last_failed_run = timezone.now()
5050
task.save(schedule_job=True)
@@ -55,7 +55,7 @@ def success_callback(job: JobModel, connection: ConnectionType, result: Any, *ar
5555
if task is None:
5656
logger.warn(f"Could not find task for job {job.name}")
5757
return
58-
task.job_id = None
58+
task.job_name = None
5959
task.successful_runs += 1
6060
task.last_successful_run = timezone.now()
6161
task.save(schedule_job=True)
@@ -95,8 +95,8 @@ class TimeUnits(models.TextChoices):
9595
),
9696
)
9797
queue = models.CharField(_("queue"), max_length=255, choices=get_queue_choices, help_text=_("Queue name"))
98-
job_id = models.CharField(
99-
_("job name"), max_length=128, editable=False, blank=True, null=True, help_text=_("Current job_id on queue")
98+
job_name = models.CharField(
99+
_("job name"), max_length=128, editable=False, blank=True, null=True, help_text=_("Current job_name on queue")
100100
)
101101
at_front = models.BooleanField(
102102
_("At front"),
@@ -185,18 +185,18 @@ def callable_func(self):
185185
@admin.display(boolean=True, description=_("is scheduled?"))
186186
def is_scheduled(self) -> bool:
187187
"""Check whether a next job for this task is queued/scheduled to be executed"""
188-
if self.job_id is None: # no job_id => is not scheduled
188+
if self.job_name is None: # no job_id => is not scheduled
189189
return False
190190
# check whether job_id is in scheduled/queued/active jobs
191191
res = (
192-
(self.job_id in self.rqueue.scheduled_job_registry.all())
193-
or (self.job_id in self.rqueue.queued_job_registry.all())
194-
or (self.job_id in self.rqueue.active_job_registry.all())
192+
(self.job_name in self.rqueue.scheduled_job_registry.all())
193+
or (self.job_name in self.rqueue.queued_job_registry.all())
194+
or (self.job_name in self.rqueue.active_job_registry.all())
195195
)
196196
# If the job_id is not scheduled/queued/started,
197197
# update the job_id to None. (The job_id belongs to a previous run which is completed)
198198
if not res:
199-
self.job_id = None
199+
self.job_name = None
200200
super(Task, self).save()
201201
return res
202202

@@ -269,9 +269,9 @@ def unschedule(self) -> bool:
269269
270270
If a job is queued to be executed or scheduled to be executed, it will remove it.
271271
"""
272-
if self.job_id is not None:
273-
self.rqueue.delete_job(self.job_id)
274-
self.job_id = None
272+
if self.job_name is not None:
273+
self.rqueue.delete_job(self.job_name)
274+
self.job_name = None
275275
self.save(schedule_job=False)
276276
return True
277277

@@ -361,7 +361,7 @@ def _schedule(self) -> bool:
361361
when=schedule_time,
362362
**kwargs,
363363
)
364-
self.job_id = job.name
364+
self.job_name = job.name
365365
super(Task, self).save()
366366
return True
367367

scheduler/tests/test_task_types/test_cron_task.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def test_clean_cron_string_invalid(self):
3434
def test_check_rescheduled_after_execution(self):
3535
task = task_factory(self.task_type)
3636
queue = task.rqueue
37-
first_run_id = task.job_id
37+
first_run_id = task.job_name
3838
entry = JobModel.get(first_run_id, connection=queue.connection)
3939
self.assertIsNotNone(entry)
4040
queue.run_sync(entry)
@@ -44,12 +44,12 @@ def test_check_rescheduled_after_execution(self):
4444
self.assertEqual(task.successful_runs, 1)
4545
self.assertIsNotNone(task.last_successful_run)
4646
self.assertTrue(task.is_scheduled())
47-
self.assertNotEqual(task.job_id, first_run_id)
47+
self.assertNotEqual(task.job_name, first_run_id)
4848

4949
def test_check_rescheduled_after_failed_execution(self):
5050
task = task_factory(self.task_type, callable_name="scheduler.tests.jobs.failing_job")
5151
queue = task.rqueue
52-
first_run_id = task.job_id
52+
first_run_id = task.job_name
5353
entry = JobModel.get(first_run_id, connection=queue.connection)
5454
queue.run_sync(entry)
5555
task.refresh_from_db()
@@ -58,7 +58,7 @@ def test_check_rescheduled_after_failed_execution(self):
5858
self.assertEqual(task.successful_runs, 0)
5959
self.assertIsNone(task.last_successful_run)
6060
self.assertTrue(task.is_scheduled())
61-
self.assertNotEqual(task.job_id, first_run_id)
61+
self.assertNotEqual(task.job_name, first_run_id)
6262

6363
def test_cron_task_enqueuing_jobs(self):
6464
queue = get_queue()
@@ -67,7 +67,7 @@ def test_cron_task_enqueuing_jobs(self):
6767

6868
task = task_factory(self.task_type, callable_name="scheduler.tests.jobs.enqueue_jobs")
6969
self.assertEqual(prev_queued + 1, queue.scheduled_job_registry.count(connection=queue.connection))
70-
first_run_id = task.job_id
70+
first_run_id = task.job_name
7171
entry = JobModel.get(first_run_id, connection=queue.connection)
7272
queue.run_sync(entry)
7373
self.assertEqual(20, len(queue.queued_job_registry))

scheduler/tests/test_task_types/test_repeatable_task.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ def test_repeat_none_interval_2_min(self):
150150
def test_check_rescheduled_after_execution(self):
151151
task = task_factory(self.task_type, scheduled_time=timezone.now() + timedelta(seconds=1), repeat=10)
152152
queue = task.rqueue
153-
first_run_id = task.job_id
153+
first_run_id = task.job_name
154154
entry = JobModel.get(first_run_id, connection=queue.connection)
155155
queue.run_sync(entry)
156156
task.refresh_from_db()
@@ -159,7 +159,7 @@ def test_check_rescheduled_after_execution(self):
159159
self.assertEqual(task.successful_runs, 1)
160160
self.assertIsNotNone(task.last_successful_run)
161161
self.assertTrue(task.is_scheduled())
162-
self.assertNotEqual(task.job_id, first_run_id)
162+
self.assertNotEqual(task.job_name, first_run_id)
163163

164164
def test_check_rescheduled_after_execution_failed_job(self):
165165
task = task_factory(
@@ -169,7 +169,7 @@ def test_check_rescheduled_after_execution_failed_job(self):
169169
repeat=10,
170170
)
171171
queue = task.rqueue
172-
first_run_id = task.job_id
172+
first_run_id = task.job_name
173173
entry = JobModel.get(first_run_id, connection=queue.connection)
174174
queue.run_sync(entry)
175175
task.refresh_from_db()
@@ -178,7 +178,7 @@ def test_check_rescheduled_after_execution_failed_job(self):
178178
self.assertEqual(task.successful_runs, 0)
179179
self.assertIsNone(task.last_successful_run)
180180
self.assertTrue(task.is_scheduled())
181-
self.assertNotEqual(task.job_id, first_run_id)
181+
self.assertNotEqual(task.job_name, first_run_id)
182182

183183
def test_check_not_rescheduled_after_last_repeat(self):
184184
task = task_factory(
@@ -187,12 +187,12 @@ def test_check_not_rescheduled_after_last_repeat(self):
187187
repeat=1,
188188
)
189189
queue = task.rqueue
190-
first_run_id = task.job_id
190+
first_run_id = task.job_name
191191
entry = JobModel.get(first_run_id, connection=queue.connection)
192192
queue.run_sync(entry)
193193
task.refresh_from_db()
194194
self.assertEqual(task.failed_runs, 0)
195195
self.assertIsNone(task.last_failed_run)
196196
self.assertEqual(task.successful_runs, 1)
197197
self.assertIsNotNone(task.last_successful_run)
198-
self.assertNotEqual(task.job_id, first_run_id)
198+
self.assertNotEqual(task.job_name, first_run_id)

scheduler/tests/test_task_types/test_task_model.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -115,35 +115,35 @@ def test_schedule(self):
115115
self.task_type,
116116
)
117117
self.assertTrue(task.is_scheduled())
118-
self.assertIsNotNone(task.job_id)
118+
self.assertIsNotNone(task.job_name)
119119

120120
def test_unschedulable(self):
121121
task = task_factory(self.task_type, enabled=False)
122122
self.assertFalse(task.is_scheduled())
123-
self.assertIsNone(task.job_id)
123+
self.assertIsNone(task.job_name)
124124

125125
def test_unschedule(self):
126126
task = task_factory(self.task_type)
127127
self.assertTrue(task.unschedule())
128-
self.assertIsNone(task.job_id)
128+
self.assertIsNone(task.job_name)
129129

130130
def test_unschedule_not_scheduled(self):
131131
task = task_factory(self.task_type, enabled=False)
132132
self.assertTrue(task.unschedule())
133-
self.assertIsNone(task.job_id)
133+
self.assertIsNone(task.job_name)
134134

135135
def test_save_enabled(self):
136136
task = task_factory(self.task_type)
137-
self.assertIsNotNone(task.job_id)
137+
self.assertIsNotNone(task.job_name)
138138

139139
def test_save_disabled(self):
140140
task = task_factory(self.task_type, enabled=False)
141141
task.save()
142-
self.assertIsNone(task.job_id)
142+
self.assertIsNone(task.job_name)
143143

144144
def test_save_and_schedule(self):
145145
task = task_factory(self.task_type)
146-
self.assertIsNotNone(task.job_id)
146+
self.assertIsNotNone(task.job_name)
147147
self.assertTrue(task.is_scheduled())
148148

149149
def test_schedule2(self):
@@ -155,7 +155,7 @@ def test_schedule2(self):
155155

156156
def test_delete_and_unschedule(self):
157157
task = task_factory(self.task_type)
158-
self.assertIsNotNone(task.job_id)
158+
self.assertIsNotNone(task.job_name)
159159
self.assertTrue(task.is_scheduled())
160160
task.delete()
161161
self.assertFalse(task.is_scheduled())
@@ -187,7 +187,7 @@ def test_at_front_passthrough(self):
187187
task = task_factory(self.task_type, at_front=True)
188188
queue = task.rqueue
189189
jobs_to_schedule = queue.scheduled_job_registry.all()
190-
self.assertIn(task.job_id, jobs_to_schedule)
190+
self.assertIn(task.job_name, jobs_to_schedule)
191191

192192
def test_callable_result(self):
193193
task = task_factory(self.task_type)
@@ -320,7 +320,7 @@ def test_admin_run_job_now_enqueues_job_at(self):
320320
task.refresh_from_db()
321321
queue = get_queue(task.queue)
322322
assert_has_execution_with_status(task, JobStatus.QUEUED)
323-
self.assertIn(task.job_id, queue.scheduled_job_registry.all())
323+
self.assertIn(task.job_name, queue.scheduled_job_registry.all())
324324

325325

326326
def test_admin_change_view(self):
@@ -362,8 +362,8 @@ def test_admin_enqueue_job_now(self):
362362
# arrange
363363
self.client.login(username="admin", password="admin")
364364
task = task_factory(self.task_type)
365-
self.assertIsNotNone(task.job_id)
366-
job = JobModel.get(task.job_id, connection=task.rqueue.connection)
365+
self.assertIsNotNone(task.job_name)
366+
job = JobModel.get(task.job_name, connection=task.rqueue.connection)
367367
self.assertEqual(job.status, JobStatus.SCHEDULED)
368368
self.assertTrue(task.is_scheduled())
369369
data = {
@@ -399,7 +399,7 @@ def test_admin_enable_job(self):
399399
# arrange
400400
self.client.login(username="admin", password="admin")
401401
task = task_factory(self.task_type, enabled=False)
402-
self.assertIsNone(task.job_id)
402+
self.assertIsNone(task.job_name)
403403
self.assertFalse(task.is_scheduled())
404404
data = {
405405
"action": "enable_selected",
@@ -446,7 +446,7 @@ def test_admin_single_delete(self):
446446
self.client.login(username="admin", password="admin")
447447
prev_count = Task.objects.filter(task_type=self.task_type).count()
448448
task = task_factory(self.task_type)
449-
self.assertIsNotNone(task.job_id)
449+
self.assertIsNotNone(task.job_name)
450450
self.assertTrue(task.is_scheduled())
451451
prev_executions_count = len(_get_executions(task))
452452
url = reverse("admin:scheduler_task_delete", args=[task.pk])
@@ -465,7 +465,7 @@ def test_admin_delete_selected(self):
465465
task.save()
466466
queue = get_queue(task.queue)
467467
scheduled_jobs = queue.scheduled_job_registry.all()
468-
job_name = task.job_id
468+
job_name = task.job_name
469469
self.assertIn(job_name, scheduled_jobs)
470470
data = {
471471
"action": "delete_selected",

scheduler/tests/test_worker/test_scheduler.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ def test_create_worker_with_scheduler__scheduler_started(self):
1616

1717
def test_scheduler_schedules_tasks(self):
1818
task = task_factory(TaskType.ONCE, scheduled_time=datetime.now() + timedelta(milliseconds=40))
19-
self.assertIsNotNone(task.job_id)
20-
self.assertNotIn(task.job_id, task.rqueue.queued_job_registry)
21-
self.assertIn(task.job_id, task.rqueue.scheduled_job_registry)
19+
self.assertIsNotNone(task.job_name)
20+
self.assertNotIn(task.job_name, task.rqueue.queued_job_registry)
21+
self.assertIn(task.job_name, task.rqueue.scheduled_job_registry)
2222
worker = create_worker("default", name="test", burst=True, with_scheduler=True)
2323
worker.bootstrap()
2424
time.sleep(1)
2525
worker.scheduler.enqueue_scheduled_jobs()
26-
self.assertIsNotNone(task.job_id)
27-
self.assertNotIn(task.job_id, task.rqueue.scheduled_job_registry)
28-
self.assertIn(task.job_id, task.rqueue.queued_job_registry)
26+
self.assertIsNotNone(task.job_name)
27+
self.assertNotIn(task.job_name, task.rqueue.scheduled_job_registry)
28+
self.assertIn(task.job_name, task.rqueue.queued_job_registry)
2929
worker.stop_scheduler()
3030
self.assertIsNone(worker.scheduler)

scheduler/tests/testtools.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def taskarg_factory(cls, **kwargs):
109109

110110
def _get_task_scheduled_job_from_registry(django_task: Task) -> JobModel:
111111
jobs_to_schedule = django_task.rqueue.scheduled_job_registry.all()
112-
entry = next(i for i in jobs_to_schedule if i == django_task.job_id)
112+
entry = next(i for i in jobs_to_schedule if i == django_task.job_name)
113113
return JobModel.get(entry, connection=django_task.rqueue.connection)
114114

115115

0 commit comments

Comments
 (0)