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