diff --git a/djcelery/schedulers.py b/djcelery/schedulers.py index c937743d..c8d8b0e0 100644 --- a/djcelery/schedulers.py +++ b/djcelery/schedulers.py @@ -120,6 +120,11 @@ def from_entry(cls, name, skip_fields=('relative', 'options'), **entry): fields.pop(skip_field, None) schedule = fields.pop('schedule') model_schedule, model_field = cls.to_model_schedule(schedule) + + # reset schedule + for t in cls.model_schedules: + fields[t[2]] = None + fields[model_field] = model_schedule fields['args'] = dumps(fields.get('args') or []) fields['kwargs'] = dumps(fields.get('kwargs') or {}) @@ -131,7 +136,7 @@ def from_entry(cls, name, skip_fields=('relative', 'options'), **entry): )) def __repr__(self): - return ''.format( + return ''.format( safe_str(self.name), self.task, safe_repr(self.args), safe_repr(self.kwargs), self.schedule, ) diff --git a/djcelery/tests/test_schedulers.py b/djcelery/tests/test_schedulers.py index 20240637..00a80d90 100644 --- a/djcelery/tests/test_schedulers.py +++ b/djcelery/tests/test_schedulers.py @@ -99,6 +99,21 @@ def test_entry(self): self.assertGreater(e3.last_run_at, e2.last_run_at) self.assertEqual(e3.total_run_count, 1) + def test_from_entry(self): + name = 'interval-vs-crontab' + entry = {'task': 'djcelery.unittest.add{0}'.format(_next_id()), + 'args': '[2, 2]', + 'schedule': timedelta(hours=24),} + self.Entry.from_entry(name, **entry) + schedule1 = PeriodicTask.objects.get(name=name).schedule + self.assertIsInstance(schedule1, schedule) + + # update schedule + entry['schedule'] = crontab(minute=0, hour='*/6') + self.Entry.from_entry(name, **entry) + schedule2 = PeriodicTask.objects.get(name=name).schedule + self.assertIsInstance(schedule2, crontab) + class test_DatabaseScheduler(unittest.TestCase): Scheduler = TrackingScheduler @@ -144,8 +159,6 @@ def test_schedule_changed(self): self.m1.save() e1 = self.s.schedule[self.m1.name] self.assertListEqual(e1.args, [32, 32]) - e1 = self.s.schedule[self.m1.name] - self.assertListEqual(e1.args, [32, 32]) self.m3.delete() self.assertRaises(KeyError, self.s.schedule.__getitem__, self.m3.name)