models.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. """
  2. Django Models.
  3. """
  4. import django
  5. from django.db import models
  6. from django.utils.translation import ugettext_lazy as _
  7. from picklefield.fields import PickledObjectField
  8. from celery import conf
  9. from celery.managers import TaskManager
  10. TASK_STATUS_PENDING = "PENDING"
  11. TASK_STATUS_RETRY = "RETRY"
  12. TASK_STATUS_FAILURE = "FAILURE"
  13. TASK_STATUS_SUCCESS = "SUCCESS"
  14. TASK_STATUSES = (TASK_STATUS_PENDING, TASK_STATUS_RETRY,
  15. TASK_STATUS_FAILURE, TASK_STATUS_SUCCESS)
  16. TASK_STATUSES_CHOICES = zip(TASK_STATUSES, TASK_STATUSES)
  17. class TaskMeta(models.Model):
  18. """Task result/status."""
  19. task_id = models.CharField(_(u"task id"), max_length=255, unique=True)
  20. status = models.CharField(_(u"task status"), max_length=50,
  21. default=TASK_STATUS_PENDING, choices=TASK_STATUSES_CHOICES)
  22. result = PickledObjectField()
  23. date_done = models.DateTimeField(_(u"done at"), auto_now=True)
  24. traceback = models.TextField(_(u"traceback"), blank=True, null=True)
  25. objects = TaskManager()
  26. class Meta:
  27. """Model meta-data."""
  28. verbose_name = _(u"task meta")
  29. verbose_name_plural = _(u"task meta")
  30. def __unicode__(self):
  31. return u"<Task: %s done:%s>" % (self.task_id, self.status)
  32. if (django.VERSION[0], django.VERSION[1]) >= (1, 1):
  33. # keep models away from syncdb/reset if database backend is not
  34. # being used.
  35. if conf.CELERY_BACKEND != 'database':
  36. TaskMeta._meta.managed = False