registry.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from crunchy import discovery
  2. from UserDict import UserDict
  3. class NotRegistered(Exception):
  4. """The task is not registered."""
  5. class AlreadyRegistered(Exception):
  6. """The task is already registered."""
  7. class TaskRegistry(UserDict):
  8. """Site registry for tasks."""
  9. AlreadyRegistered = AlreadyRegistered
  10. NotRegistered = NotRegistered
  11. def __init__(self):
  12. self.data = {}
  13. def autodiscover(self):
  14. discovery.autodiscover()
  15. def register(self, task_name, task_func):
  16. if task_name in self.data:
  17. raise self.AlreadyRegistered(
  18. "Task with name %s is already registered." % task_name)
  19. self.data[task_name] = task_func
  20. def unregister(self, task_name):
  21. if task_name not in self.data:
  22. raise self.NotRegistered(
  23. "Task with name %s is not registered." % task_name)
  24. del self.data[task_name]
  25. def get_all(self):
  26. """Get all task types."""
  27. return self.data
  28. def get_task(self, task_name):
  29. """Get task by name."""
  30. return self.data[task_name]
  31. """This is the global task registry."""
  32. tasks = TaskRegistry()