models.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from django.db import models
  2. from celery.registry import tasks
  3. from celery.managers import TaskManager, PeriodicTaskManager
  4. from django.utils.translation import ugettext_lazy as _
  5. class TaskMeta(models.Model):
  6. task_id = models.CharField(_(u"task id"), max_length=255, unique=True)
  7. is_done = models.BooleanField(_(u"is done"), default=False)
  8. date_done = models.DateTimeField(_(u"done at"), auto_now=True)
  9. objects = TaskManager()
  10. class Meta:
  11. verbose_name = _(u"task meta")
  12. verbose_name_plural = _(u"task meta")
  13. def __unicode__(self):
  14. return u"<Task: %s done:%s>" % (self.task_id, self.is_done)
  15. class PeriodicTaskMeta(models.Model):
  16. name = models.CharField(_(u"name"), max_length=255, unique=True)
  17. last_run_at = models.DateTimeField(_(u"last time run"),
  18. auto_now=True, blank=True)
  19. total_run_count = models.PositiveIntegerField(_(u"total run count"),
  20. default=0)
  21. objects = PeriodicTaskManager()
  22. class Meta:
  23. verbose_name = _(u"periodic task")
  24. verbose_name_plural = _(u"periodic tasks")
  25. def __unicode__(self):
  26. return u"<PeriodicTask: %s [last-run:%s, total-run:%d]>" % (
  27. self.name, self.last_run_at, self.total_run_count)
  28. def delay(self, **kwargs):
  29. self.task.delay()
  30. self.total_run_count = self.total_run_count + 1
  31. self.save()
  32. @property
  33. def task(self):
  34. return tasks[self.name]