models.py 2.2 KB

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