registry.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. """celery.registry"""
  2. from celery import discovery
  3. from celery.utils import get_full_cls_name
  4. from celery.exceptions import NotRegistered
  5. from UserDict import UserDict
  6. import inspect
  7. class TaskRegistry(UserDict):
  8. """Site registry for tasks."""
  9. NotRegistered = NotRegistered
  10. def __init__(self):
  11. self.data = {}
  12. def autodiscover(self):
  13. """Autodiscovers tasks using :func:`celery.discovery.autodiscover`."""
  14. discovery.autodiscover()
  15. def register(self, task):
  16. """Register a task in the task registry.
  17. The task will be automatically instantiated if it's a class
  18. not an instance.
  19. """
  20. task = task() if inspect.isclass(task) else task
  21. name = task.name
  22. self.data[name] = task
  23. def unregister(self, name):
  24. """Unregister task by name.
  25. :param name: name of the task to unregister, or a
  26. :class:`celery.task.Task` class with a valid ``name`` attribute.
  27. :raises celery.exceptions.NotRegistered: if the task has not
  28. been registered.
  29. """
  30. if hasattr(name, "run"):
  31. name = name.name
  32. if name not in self.data:
  33. raise self.NotRegistered(
  34. "Task with name %s is not registered." % name)
  35. del self.data[name]
  36. def get_all(self):
  37. """Get all task types."""
  38. return self.data
  39. def filter_types(self, type):
  40. """Return all tasks of a specific type."""
  41. return dict((task_name, task)
  42. for task_name, task in self.data.items()
  43. if task.type == type)
  44. def get_all_regular(self):
  45. """Get all regular task types."""
  46. return self.filter_types(type="regular")
  47. def get_all_periodic(self):
  48. """Get all periodic task types."""
  49. return self.filter_types(type="periodic")
  50. def get_task(self, name):
  51. """Get task by name."""
  52. return self.data[name]
  53. """
  54. .. data:: tasks
  55. The global task registry.
  56. """
  57. tasks = TaskRegistry()