source file: /opt/devel/celery/celery/managers.py
file stats: 30 lines, 30 executed: 100.0% covered
   1. from django.db import models
   2. from celery.registry import tasks
   3. from datetime import datetime, timedelta
   4. 
   5. 
   6. class TaskManager(models.Manager):
   7. 
   8.     def get_task(self, task_id):
   9.         task, created = self.get_or_create(task_id=task_id)
  10.         return task
  11. 
  12.     def is_done(self, task_id):
  13.         return self.get_task(task_id).is_done
  14. 
  15.     def get_all_expired(self):
  16.         return self.filter(date_done__lt=datetime.now() - timedelta(days=5),
  17.                            is_done=True)
  18. 
  19.     def delete_expired(self):
  20.         self.get_all_expired().delete()
  21. 
  22.     def mark_as_done(self, task_id):
  23.         task, created = self.get_or_create(task_id=task_id, defaults={
  24.                                             "is_done": True})
  25.         if not created:
  26.             task.is_done = True
  27.             task.save()
  28. 
  29. 
  30. class PeriodicTaskManager(models.Manager):
  31. 
  32.     def get_waiting_tasks(self):
  33.         periodic_tasks = tasks.get_all_periodic()
  34.         waiting = []
  35.         for task_name, task in periodic_tasks.items():
  36.             task_meta, created = self.get_or_create(name=task_name)
  37.             # task_run.every must be a timedelta object.
  38.             run_at = task_meta.last_run_at + task.run_every
  39.             if datetime.now() > run_at:
  40.                 waiting.append(task_meta)
  41.         return waiting