source file: /opt/devel/celery/celery/registry.py
file stats: 46 lines, 46 executed: 100.0% covered
1. from celery import discovery 2. from UserDict import UserDict 3. 4. 5. class NotRegistered(Exception): 6. """The task is not registered.""" 7. 8. 9. class AlreadyRegistered(Exception): 10. """The task is already registered.""" 11. 12. 13. class TaskRegistry(UserDict): 14. """Site registry for tasks.""" 15. 16. AlreadyRegistered = AlreadyRegistered 17. NotRegistered = NotRegistered 18. 19. def __init__(self): 20. self.data = {} 21. 22. def autodiscover(self): 23. discovery.autodiscover() 24. 25. def register(self, task, task_name=None): 26. is_class = False 27. if hasattr(task, "run"): 28. is_class = True 29. task_name = task.name 30. if task_name in self.data: 31. raise self.AlreadyRegistered( 32. "Task with name %s is already registered." % task_name) 33. 34. if is_class: 35. self.data[task_name] = task() # instantiate Task class 36. else: 37. task.type = "regular" 38. self.data[task_name] = task 39. 40. def unregister(self, task_name): 41. if hasattr(task_name, "run"): 42. task_name = task_name.name 43. if task_name not in self.data: 44. raise self.NotRegistered( 45. "Task with name %s is not registered." % task_name) 46. del self.data[task_name] 47. 48. def get_all(self): 49. """Get all task types.""" 50. return self.data 51. 52. def filter_types(self, type): 53. """Return all tasks of a specific type.""" 54. return dict([(task_name, task) 55. for task_name, task in self.data.items() 56. if task.type == type]) 57. 58. def get_all_regular(self): 59. """Get all regular task types.""" 60. return self.filter_types(type="regular") 61. 62. def get_all_periodic(self): 63. """Get all periodic task types.""" 64. return self.filter_types(type="periodic") 65. 66. def get_task(self, task_name): 67. """Get task by name.""" 68. return self.data[task_name] 69. 70. """This is the global task registry.""" 71. tasks = TaskRegistry()