def save_model(self, request, obj, form, change): obj.user = request.user if not obj.run_at and obj.id: periodic_task_remove('delay_%s' % obj.id) if obj.run_at: obj.save() delay_task_generator(obj.id, obj.run_at) functions = { 1: generate_cron_never, 2: generate_cron_daily, 3: generate_cron_weekly, 4: generate_cron_monthly, } cron_string = functions.get(obj.repeat_each, generate_cron_never)( day=obj.repeat_each_day, weekday=obj.repeat_each_weekday, hour_min=obj.repeat_at, ) if obj.cron != cron_string: # cron changed obj.save() obj.cron = cron_string if obj.cron: periodic_task_generator(obj.id, obj.cron) else: periodic_task_remove(obj.id) obj.save()
def test_task_generator(self, mock_set_cron, mock_set_interval): self.assertFalse(mock_set_cron.called) self.assertFalse(mock_set_interval.called) PeriodicTask.objects.all().delete() init_count = PeriodicTask.objects.count() # simple cron task periodic_task_generator('222', '35 * * * *') self.assertEqual(init_count + 1, PeriodicTask.objects.count()) self.assertTrue(mock_set_cron.called) self.assertFalse(mock_set_interval.called) # monthly task - special case periodic_task_generator('222', '35 * 5 * *') self.assertEqual(init_count + 1, PeriodicTask.objects.count()) self.assertTrue(mock_set_interval.called)
def save_model(self, request, obj, form, change): obj.user = request.user if not obj.run_at and obj.id: periodic_task_remove('delay_%s' % obj.id) if obj.run_at: obj.save() delay_task_generator(obj.id, obj.run_at) functions = {1: generate_cron_never, 2: generate_cron_daily, 3: generate_cron_weekly, 4: generate_cron_monthly,} cron_string = functions.get(obj.repeat_each, generate_cron_never)( day=obj.repeat_each_day, weekday=obj.repeat_each_weekday, hour_min=obj.repeat_at, ) if obj.cron != cron_string: # cron changed obj.save() obj.cron = cron_string if obj.cron: periodic_task_generator(obj.id, obj.cron) else: periodic_task_remove(obj.id) obj.save()