Skip to content

Commit f1381b0

Browse files
committed
refactor: separated queue views to several files
1 parent 3256a08 commit f1381b0

File tree

14 files changed

+94
-111
lines changed

14 files changed

+94
-111
lines changed

scheduler/helpers/queues/getters.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from .queue_logic import Queue
1313

1414

15-
1615
_BAD_QUEUE_CONFIGURATION = set()
1716

1817

@@ -77,5 +76,3 @@ def get_all_workers() -> Set[WorkerModel]:
7776
logger.error(f"Could not connect for queue {queue_name}: {e}")
7877
_BAD_QUEUE_CONFIGURATION.add(queue_name)
7978
return workers_set
80-
81-

scheduler/management/commands/scheduler_stats.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def add_arguments(self, parser):
5050
def _print_separator(self):
5151
click.echo("-" * self.table_width)
5252

53-
def _print_stats_dashboard(self, statistics, prev_stats=None, with_color:bool = True):
53+
def _print_stats_dashboard(self, statistics, prev_stats=None, with_color: bool = True):
5454
if self.interval:
5555
click.clear()
5656
click.echo()

scheduler/templates/admin/scheduler/job_detail.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,27 +149,27 @@ <h2 class="fieldset-heading">Last result</h2>
149149
</fieldset>
150150
<div class="submit-row">
151151
<div class="deletelink-box">
152-
<a href="{% url 'queue_job_action' job.name 'delete' %}" class="deletelink">Delete</a>
152+
<a href="{% url 'job_detail_action' job.name 'delete' %}" class="deletelink">Delete</a>
153153
</div>
154154
{% if job.is_started %}
155155
<div class="deletelink-box">
156-
<form method='POST' action="{% url 'queue_job_action' job.name 'cancel' %}">
156+
<form method='POST' action="{% url 'job_detail_action' job.name 'cancel' %}">
157157
{% csrf_token %}
158158
<input type="submit" value="cancel" class="default" name="cancel">
159159
</form>
160160
</div>
161161
{% endif %}
162162
{% if job.is_failed %}
163163
<div class="deletelink-box">
164-
<form method='POST' action="{% url 'queue_job_action' job.name 'requeue' %}">
164+
<form method='POST' action="{% url 'job_detail_action' job.name 'requeue' %}">
165165
{% csrf_token %}
166166
<input type="submit" value="Requeue" class="default" name="requeue">
167167
</form>
168168
</div>
169169
{% endif %}
170170
{% if not job.is_queued and not job.is_failed %}
171171
<div class="deletelink-box">
172-
<form method='POST' action="{% url 'queue_job_action' job.name 'enqueue' %}">
172+
<form method='POST' action="{% url 'job_detail_action' job.name 'enqueue' %}">
173173
{% csrf_token %}
174174
<input type="submit" value="Enqueue" class="default" name="Requeue">
175175
</form>

scheduler/templates/admin/scheduler/jobs.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<li><a href="{% url 'queue_registry_action' queue.name registry_name 'empty' %}" class="deletelink">Empty Queue</a></li>
3232
</ul>
3333
<div class="module" id="changelist">
34-
<form id="changelist-form" action="{% url 'queue_confirm_action' queue.name %}" method="post">
34+
<form id="changelist-form" action="{% url 'queue_confirm_job_action' queue.name %}" method="post">
3535
{% csrf_token %}
3636
<div class="actions">
3737
<label>Actions:

scheduler/tests/test_multiprocess/test_integrity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def test_cancel_job_after_it_started(self):
2222
job = JobModel.get(job.name, connection=queue.connection)
2323
self.assertEqual(JobStatus.STARTED, job.status)
2424
# act
25-
res = self.client.post(reverse("queue_job_action", args=[job.name, "cancel"]), {"post": "yes"}, follow=True)
25+
res = self.client.post(reverse("job_detail_action", args=[job.name, "cancel"]), {"post": "yes"}, follow=True)
2626

2727
# assert
2828
self.assertEqual(200, res.status_code)

scheduler/tests/test_task_types/test_task_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ def test_admin_change_view__bad_redis_connection(self):
340340
# arrange
341341
self.client.login(username="admin", password="admin")
342342
task = task_factory(self.task_type, queue="test2", instance_only=True)
343-
task.save(schedule_job=False)
343+
task.save(schedule_job=False)
344344
url = reverse(
345345
f"admin:scheduler_task_change",
346346
args=[

scheduler/tests/test_views/test_queue_job_action.py renamed to scheduler/tests/test_views/test_job_detail_action.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
class SingleJobActionViewsTest(BaseTestCase):
1313
def test_single_job_action_unknown_job(self):
14-
res = self.client.get(reverse("queue_job_action", args=["unknown", "cancel"]), follow=True)
14+
res = self.client.get(reverse("job_detail_action", args=["unknown", "cancel"]), follow=True)
1515
self.assertEqual(200, res.status_code)
1616
assert_response_has_msg(res, "Job unknown does not exist, maybe its TTL has passed")
1717

@@ -22,7 +22,7 @@ def test_single_job_action_unknown_action(self):
2222
worker.work()
2323
job = JobModel.get(job.name, connection=queue.connection)
2424
self.assertTrue(job.is_failed)
25-
res = self.client.get(reverse("queue_job_action", args=[job.name, "unknown"]), follow=True)
25+
res = self.client.get(reverse("job_detail_action", args=[job.name, "unknown"]), follow=True)
2626
self.assertEqual(400, res.status_code)
2727

2828
def test_single_job_action_requeue_job(self):
@@ -32,18 +32,18 @@ def test_single_job_action_requeue_job(self):
3232
worker.work()
3333
job = JobModel.get(job.name, connection=queue.connection)
3434
self.assertTrue(job.is_failed)
35-
res = self.client.get(reverse("queue_job_action", args=[job.name, "requeue"]), follow=True)
35+
res = self.client.get(reverse("job_detail_action", args=[job.name, "requeue"]), follow=True)
3636
self.assertEqual(200, res.status_code)
37-
self.client.post(reverse("queue_job_action", args=[job.name, "requeue"]), {"requeue": "Requeue"}, follow=True)
37+
self.client.post(reverse("job_detail_action", args=[job.name, "requeue"]), {"requeue": "Requeue"}, follow=True)
3838
self.assertIn(job, JobModel.get_many(queue.queued_job_registry.all(), queue.connection))
3939
queue.delete_job(job.name)
4040

4141
def test_single_job_action_delete_job(self):
4242
queue = get_queue("default")
4343
job = queue.create_and_enqueue_job(test_job, job_info_ttl=0)
44-
res = self.client.get(reverse("queue_job_action", args=[job.name, "delete"]), follow=True)
44+
res = self.client.get(reverse("job_detail_action", args=[job.name, "delete"]), follow=True)
4545
self.assertEqual(200, res.status_code)
46-
self.client.post(reverse("queue_job_action", args=[job.name, "delete"]), {"post": "yes"}, follow=True)
46+
self.client.post(reverse("job_detail_action", args=[job.name, "delete"]), {"post": "yes"}, follow=True)
4747
self.assertFalse(JobModel.exists(job.name, connection=queue.connection))
4848
self.assertNotIn(job.name, queue.queued_job_registry.all())
4949

@@ -52,9 +52,9 @@ def test_single_job_action_cancel_job(self):
5252
job = queue.create_and_enqueue_job(long_job)
5353
self.assertTrue(job.is_queued)
5454
job = JobModel.get(job.name, connection=queue.connection)
55-
res = self.client.get(reverse("queue_job_action", args=[job.name, "cancel"]), follow=True)
55+
res = self.client.get(reverse("job_detail_action", args=[job.name, "cancel"]), follow=True)
5656
self.assertEqual(200, res.status_code)
57-
res = self.client.post(reverse("queue_job_action", args=[job.name, "cancel"]), {"post": "yes"}, follow=True)
57+
res = self.client.post(reverse("job_detail_action", args=[job.name, "cancel"]), {"post": "yes"}, follow=True)
5858
self.assertEqual(200, res.status_code)
5959
job = JobModel.get(job.name, connection=queue.connection)
6060
self.assertTrue(job.is_canceled)
@@ -63,12 +63,12 @@ def test_single_job_action_cancel_job(self):
6363
def test_single_job_action_cancel_job_that_is_already_cancelled(self):
6464
queue = get_queue("django_tasks_scheduler_test")
6565
job = queue.create_and_enqueue_job(long_job)
66-
res = self.client.post(reverse("queue_job_action", args=[job.name, "cancel"]), {"post": "yes"}, follow=True)
66+
res = self.client.post(reverse("job_detail_action", args=[job.name, "cancel"]), {"post": "yes"}, follow=True)
6767
self.assertEqual(200, res.status_code)
6868
tmp = JobModel.get(job.name, connection=queue.connection)
6969
self.assertTrue(tmp.is_canceled)
7070
self.assertNotIn(job.name, queue.queued_job_registry.all())
71-
res = self.client.post(reverse("queue_job_action", args=[job.name, "cancel"]), {"post": "yes"}, follow=True)
71+
res = self.client.post(reverse("job_detail_action", args=[job.name, "cancel"]), {"post": "yes"}, follow=True)
7272
self.assertEqual(200, res.status_code)
7373
assert_message_in_response(res, f"Could not perform action: Cannot cancel already canceled job: {job.name}")
7474

@@ -86,9 +86,9 @@ def test_single_job_action_enqueue_job(self):
8686
self.assertIsNotNone(job_list[-1].enqueued_at)
8787

8888
# Try to force enqueue last job should do nothing
89-
res = self.client.get(reverse("queue_job_action", args=[job_list[-1].name, "enqueue"]), follow=True)
89+
res = self.client.get(reverse("job_detail_action", args=[job_list[-1].name, "enqueue"]), follow=True)
9090
self.assertEqual(200, res.status_code)
91-
res = self.client.post(reverse("queue_job_action", args=[job_list[-1].name, "enqueue"]), follow=True)
91+
res = self.client.post(reverse("job_detail_action", args=[job_list[-1].name, "enqueue"]), follow=True)
9292

9393
self.assertEqual(200, res.status_code)
9494
tmp = JobModel.get(job_list[-1].name, connection=queue.connection)
@@ -109,9 +109,9 @@ def test_single_job_action_enqueue_job_sync_queue(self):
109109
self.assertIsNotNone(job_list[-1].enqueued_at)
110110

111111
# Try to force enqueue last job should do nothing
112-
res = self.client.get(reverse("queue_job_action", args=[job_list[-1].name, "enqueue"]), follow=True)
112+
res = self.client.get(reverse("job_detail_action", args=[job_list[-1].name, "enqueue"]), follow=True)
113113
self.assertEqual(200, res.status_code)
114-
res = self.client.post(reverse("queue_job_action", args=[job_list[-1].name, "enqueue"]), follow=True)
114+
res = self.client.post(reverse("job_detail_action", args=[job_list[-1].name, "enqueue"]), follow=True)
115115

116116
self.assertEqual(200, res.status_code)
117117
tmp = JobModel.get(job_list[-1].name, connection=queue.connection)

scheduler/tests/test_views/test_job_details.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,9 @@ def test_clear_queue_scheduled(self):
114114
self.assertEqual(200, res.status_code)
115115
self.assertEqual(res.context["jobs"], [job])
116116

117-
res = self.client.post(reverse("queue_registry_action", args=[queue.name, "scheduled", "empty"]),
118-
{"post": "yes"}, follow=True)
117+
res = self.client.post(
118+
reverse("queue_registry_action", args=[queue.name, "scheduled", "empty"]), {"post": "yes"}, follow=True
119+
)
119120
assert_message_in_response(res, f"You have successfully cleared the scheduled jobs in queue {queue.name}")
120121
self.assertEqual(200, res.status_code)
121122
self.assertFalse(JobModel.exists(job.name, connection=queue.connection))

scheduler/tests/test_views/test_queue_actions.py

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from django.urls import reverse
22

33
from scheduler.helpers.queues import get_queue
4-
from scheduler.worker import create_worker
54
from scheduler.redis_models import JobStatus, JobModel
65
from scheduler.tests.jobs import failing_job, test_job
76
from scheduler.tests.test_views.base import BaseTestCase
87
from scheduler.tests.testtools import assert_message_in_response
8+
from scheduler.worker import create_worker
99

1010

1111
class QueueActionsViewsTest(BaseTestCase):
@@ -20,12 +20,7 @@ def test_job_list_action_delete_jobs__with_bad_next_url(self):
2020

2121
# remove those jobs using view
2222
res = self.client.post(
23-
reverse(
24-
"queue_actions",
25-
args=[
26-
queue.name,
27-
],
28-
),
23+
reverse("queue_job_actions", args=[queue.name]),
2924
{
3025
"action": "delete",
3126
"job_names": job_names,
@@ -51,12 +46,7 @@ def test_job_list_action_delete_jobs(self):
5146

5247
# remove those jobs using view
5348
res = self.client.post(
54-
reverse(
55-
"queue_actions",
56-
args=[
57-
queue.name,
58-
],
59-
),
49+
reverse("queue_job_actions", args=[queue.name]),
6050
{"action": "delete", "job_names": job_names},
6151
follow=True,
6252
)
@@ -87,7 +77,7 @@ def test_job_list_action_requeue_jobs(self):
8777
self.assertTrue(job.is_failed)
8878

8979
# re-nqueue failed jobs from failed queue
90-
self.client.post(reverse("queue_actions", args=[queue_name]), {"action": "requeue", "job_names": job_names})
80+
self.client.post(reverse("queue_job_actions", args=[queue_name]), {"action": "requeue", "job_names": job_names})
9181

9282
# check if we requeue all failed jobs
9383
for job_name in job_names:
@@ -115,7 +105,7 @@ def test_job_list_action_stop_jobs__move_to_finished_registry(self):
115105

116106
# Stop those jobs using the view
117107
self.assertEqual(len(queue.active_job_registry), len(job_names))
118-
self.client.post(reverse("queue_actions", args=[queue_name]), {"action": "stop", "job_names": job_names})
108+
self.client.post(reverse("queue_job_actions", args=[queue_name]), {"action": "stop", "job_names": job_names})
119109
self.assertEqual(0, len(queue.active_job_registry))
120110

121111
self.assertEqual(0, len(queue.canceled_job_registry))

scheduler/urls.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,18 @@
77
path("queues/stats.json", views.stats_json, name="queues_home_json"),
88
path("queues/<str:queue_name>/workers/", views.queue_workers, name="queue_workers"),
99
path("queues/<str:queue_name>/<str:registry_name>/jobs", views.list_registry_jobs, name="queue_registry_jobs"),
10-
path("queues/<str:queue_name>/<str:registry_name>/<str:action>/", views.queue_registry_actions, name="queue_registry_action"),
11-
path("queues/<str:queue_name>/confirm-action/", views.queue_confirm_action, name="queue_confirm_action"),
12-
path("queues/<str:queue_name>/actions/", views.queue_job_actions, name="queue_actions"),
10+
path(
11+
"queues/<str:queue_name>/<str:registry_name>/<str:action>/",
12+
views.queue_registry_actions,
13+
name="queue_registry_action",
14+
),
15+
path("queues/<str:queue_name>/confirm-action/", views.queue_confirm_job_action, name="queue_confirm_job_action"),
16+
path("queues/<str:queue_name>/actions/", views.queue_job_actions, name="queue_job_actions"),
1317
]
1418

1519
urlpatterns += [
1620
path("workers/", views.workers_list, name="workers_home"),
1721
path("workers/<str:name>/", views.worker_details, name="worker_details"),
1822
path("jobs/<str:job_name>/", views.job_detail, name="job_details"),
19-
path("jobs/<str:job_name>/<str:action>/", views.job_action, name="queue_job_action"),
23+
path("jobs/<str:job_name>/<str:action>/", views.job_action, name="job_detail_action"),
2024
]

0 commit comments

Comments
 (0)