models.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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.managers import TaskManager, TaskSetManager
  7. TASK_STATUS_PENDING = "PENDING"
  8. TASK_STATUS_RETRY = "RETRY"
  9. TASK_STATUS_FAILURE = "FAILURE"
  10. TASK_STATUS_SUCCESS = "SUCCESS"
  11. TASK_STATUSES = (TASK_STATUS_PENDING, TASK_STATUS_RETRY,
  12. TASK_STATUS_FAILURE, TASK_STATUS_SUCCESS)
  13. TASK_STATUSES_CHOICES = zip(TASK_STATUSES, TASK_STATUSES)
  14. class TaskMeta(models.Model):
  15. """Task result/status."""
  16. task_id = models.CharField(_(u"task id"), max_length=255, unique=True)
  17. status = models.CharField(_(u"task status"), max_length=50,
  18. default=TASK_STATUS_PENDING, choices=TASK_STATUSES_CHOICES)
  19. result = PickledObjectField()
  20. date_done = models.DateTimeField(_(u"done at"), auto_now=True)
  21. traceback = models.TextField(_(u"traceback"), blank=True, null=True)
  22. objects = TaskManager()
  23. class Meta:
  24. """Model meta-data."""
  25. verbose_name = _(u"task meta")
  26. verbose_name_plural = _(u"task meta")
  27. def __unicode__(self):
  28. return u"<Task: %s successful: %s>" % (self.task_id, self.status)
  29. class TaskSetMeta(models.Model):
  30. """TaskSet result"""
  31. taskset_id = models.CharField(_(u"task id"), max_length=255, unique=True)
  32. result = PickledObjectField()
  33. date_done = models.DateTimeField(_(u"done at"), auto_now=True)
  34. objects = TaskSetManager()
  35. class Meta:
  36. """Model meta-data."""
  37. verbose_name = _(u"taskset meta")
  38. verbose_name_plural = _(u"taskset meta")
  39. def __unicode__(self):
  40. return u"<TaskSet: %s>" % (self.taskset_id)
  41. if (django.VERSION[0], django.VERSION[1]) >= (1, 1):
  42. # keep models away from syncdb/reset if database backend is not
  43. # being used.
  44. if conf.CELERY_BACKEND != 'database':
  45. TaskMeta._meta.managed = False
  46. TaskSetMeta._meta.managed = False