source file: /opt/devel/celery/testproj/../celery/models.py
file stats: 33 lines, 33 executed: 100.0% covered
   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. 
   6. 
   7. class TaskMeta(models.Model):
   8.     task_id = models.CharField(_(u"task id"), max_length=255, unique=True)
   9.     is_done = models.BooleanField(_(u"is done"), default=False)
  10.     date_done = models.DateTimeField(_(u"done at"), auto_now=True)
  11. 
  12.     objects = TaskManager()
  13. 
  14.     class Meta:
  15.         verbose_name = _(u"task meta")
  16.         verbose_name_plural = _(u"task meta")
  17. 
  18.     def __unicode__(self):
  19.         return u"<Task: %s done:%s>" % (self.task_id, self.is_done)
  20. 
  21. 
  22. class PeriodicTaskMeta(models.Model):
  23.     name = models.CharField(_(u"name"), max_length=255, unique=True)
  24.     last_run_at = models.DateTimeField(_(u"last time run"),
  25.                                        auto_now=True, blank=True)
  26.     total_run_count = models.PositiveIntegerField(_(u"total run count"),
  27.                                                   default=0)
  28. 
  29.     objects = PeriodicTaskManager()
  30. 
  31.     class Meta:
  32.         verbose_name = _(u"periodic task")
  33.         verbose_name_plural = _(u"periodic tasks")
  34. 
  35.     def __unicode__(self):
  36.         return u"<PeriodicTask: %s [last-run:%s, total-run:%d]>" % (
  37.                 self.name, self.last_run_at, self.total_run_count)
  38. 
  39.     def delay(self, **kwargs):
  40.         self.task.delay()
  41.         self.total_run_count = self.total_run_count + 1
  42.         self.save()
  43. 
  44.     @property
  45.     def task(self):
  46.         return tasks[self.name]