registry.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. """celery.registry"""
  2. from __future__ import absolute_import
  3. import inspect
  4. from celery.exceptions import NotRegistered
  5. class TaskRegistry(dict):
  6. NotRegistered = NotRegistered
  7. def regular(self):
  8. """Get all regular task types."""
  9. return self.filter_types("regular")
  10. def periodic(self):
  11. """Get all periodic task types."""
  12. return self.filter_types("periodic")
  13. def register(self, task):
  14. """Register a task in the task registry.
  15. The task will be automatically instantiated if not already an
  16. instance.
  17. """
  18. self[task.name] = inspect.isclass(task) and task() or task
  19. def unregister(self, name):
  20. """Unregister task by name.
  21. :param name: name of the task to unregister, or a
  22. :class:`celery.task.base.Task` with a valid `name` attribute.
  23. :raises celery.exceptions.NotRegistered: if the task has not
  24. been registered.
  25. """
  26. try:
  27. # Might be a task class
  28. name = name.name
  29. except AttributeError:
  30. pass
  31. self.pop(name)
  32. def filter_types(self, type):
  33. """Return all tasks of a specific type."""
  34. return dict((name, task) for name, task in self.iteritems()
  35. if task.type == type)
  36. def __getitem__(self, key):
  37. try:
  38. return dict.__getitem__(self, key)
  39. except KeyError:
  40. raise self.NotRegistered(key)
  41. def pop(self, key, *args):
  42. try:
  43. return dict.pop(self, key, *args)
  44. except KeyError:
  45. raise self.NotRegistered(key)
  46. #: Global task registry.
  47. tasks = TaskRegistry()
  48. def _unpickle_task(name):
  49. return tasks[name]