Skip to content

Commit

Permalink
Change last_run_at=None when using disable tasks admin action (#501)
Browse files Browse the repository at this point in the history
* Add last_run_at=None when disable_tasks using admin action

* Add disable_tasks test

* Add author name

* Change import order

* Add Changelog entry
Oleh929216 committed Jan 25, 2022
1 parent 3968904 commit 343405c
Showing 4 changed files with 40 additions and 2 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
@@ -37,6 +37,7 @@ Grégoire Cachet <gregoire@audacy.fr>
Hari <haridara@gmail.com>
Idan Zalzberg <idanzalz@gmail.com>
Ionel Maries Cristian <ionel.mc@gmail.com>
Jaeyoung Heo <jay.jaeyoung@gmail.com>
Jannis Leidel <jannis@leidel.info>
Jason Baker <amnorvend@gmail.com>
Jay States <jstates@based.ca>
10 changes: 9 additions & 1 deletion Changelog
Original file line number Diff line number Diff line change
@@ -4,6 +4,14 @@
Change history
================

2.3.0
=====
:release-date:
:release-by:

- Admin "disable_tasks" action also updates PeriodicTask's last_run_at field


2.2.1
=====
:release-date: 2021-07-02 11:15 a.m. UTC+6:00
@@ -30,7 +38,7 @@

2.1.0
=====
:release-date:
:release-date:
:release-by: Asif Saif Uddin
- Fix string representation of CrontabSchedule, so it matches UNIX CRON expression format (#318)
- If no schedule is selected in PeriodicTask form, raise a non-field error instead of an error bounded to the `interval` field (#327)
2 changes: 1 addition & 1 deletion django_celery_beat/admin.py
Original file line number Diff line number Diff line change
@@ -179,7 +179,7 @@ def enable_tasks(self, request, queryset):
enable_tasks.short_description = _('Enable selected tasks')

def disable_tasks(self, request, queryset):
rows_updated = queryset.update(enabled=False)
rows_updated = queryset.update(enabled=False, last_run_at=None)
PeriodicTasks.update_changed()
self._message_user_about_update(request, rows_updated, 'disabled')
disable_tasks.short_description = _('Disable selected tasks')
29 changes: 29 additions & 0 deletions t/unit/test_admin.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import pytest

from django.core.exceptions import ValidationError
from django.test import TestCase
from itertools import combinations
from unittest import mock

from django_celery_beat.admin import PeriodicTaskAdmin
from django_celery_beat.models import \
@@ -115,3 +117,30 @@ def test_validate_unique_not_raises(self):
PeriodicTask(interval=IntervalSchedule()).validate_unique()
PeriodicTask(solar=SolarSchedule()).validate_unique()
PeriodicTask(clocked=ClockedSchedule(), one_off=True).validate_unique()


@pytest.mark.django_db()
class DisableTasksTest(TestCase):

@classmethod
def setUpTestData(cls):
super().setUpTestData()
cls.interval_schedule = IntervalSchedule.objects.create(every=10,
period=DAYS)

@mock.patch('django_celery_beat.admin.PeriodicTaskAdmin.'
'_message_user_about_update')
def test_disable_tasks(self, mock_message_user):
PeriodicTask.objects.create(name='name1', task='task1', enabled=True,
interval=self.interval_schedule)
PeriodicTask.objects.create(name='name2', task='task2', enabled=True,
interval=self.interval_schedule)

qs = PeriodicTask.objects.all()

PeriodicTaskAdmin(PeriodicTask, None).disable_tasks(None, qs)

for periodic_task in qs:
self.assertFalse(periodic_task.enabled)
self.assertIsNone(periodic_task.last_run_at)
mock_message_user.assert_called_once()

0 comments on commit 343405c

Please sign in to comment.