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