models.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import django
  2. from django.db import models
  3. from django.utils.translation import ugettext_lazy as _
  4. from picklefield.fields import PickledObjectField
  5. from celery import conf
  6. from celery import states
  7. from celery.managers import TaskManager, TaskSetManager
  8. TASK_STATUSES_CHOICES = zip(states.ALL_STATES, states.ALL_STATES)
  9. class TaskMeta(models.Model):
  10. """Task result/status."""
  11. task_id = models.CharField(_(u"task id"), max_length=255, unique=True)
  12. status = models.CharField(_(u"task status"), max_length=50,
  13. default=states.PENDING, choices=TASK_STATUSES_CHOICES)
  14. result = PickledObjectField(null=False, default=None)
  15. date_done = models.DateTimeField(_(u"done at"), auto_now=True)
  16. traceback = models.TextField(_(u"traceback"), blank=True, null=True)
  17. objects = TaskManager()
  18. class Meta:
  19. """Model meta-data."""
  20. verbose_name = _(u"task meta")
  21. verbose_name_plural = _(u"task meta")
  22. def to_dict(self):
  23. return {"task_id": self.task_id,
  24. "status": self.status,
  25. "result": self.result,
  26. "date_done": self.date_done,
  27. "traceback": self.traceback}
  28. def __unicode__(self):
  29. return u"<Task: %s state->%s>" % (self.task_id, self.status)
  30. class TaskSetMeta(models.Model):
  31. """TaskSet result"""
  32. taskset_id = models.CharField(_(u"task id"), max_length=255, unique=True)
  33. result = PickledObjectField()
  34. date_done = models.DateTimeField(_(u"done at"), auto_now=True)
  35. objects = TaskSetManager()
  36. class Meta:
  37. """Model meta-data."""
  38. verbose_name = _(u"taskset meta")
  39. verbose_name_plural = _(u"taskset meta")
  40. def to_dict(self):
  41. return {"taskset_id": self.taskset_id,
  42. "result": self.result,
  43. "date_done": self.date_done}
  44. def __unicode__(self):
  45. return u"<TaskSet: %s>" % (self.taskset_id)
  46. if (django.VERSION[0], django.VERSION[1]) >= (1, 1):
  47. # keep models away from syncdb/reset if database backend is not
  48. # being used.
  49. if conf.RESULT_BACKEND != 'database':
  50. TaskMeta._meta.managed = False
  51. TaskSetMeta._meta.managed = False