registry.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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, task_name=None):
  16. is_class = False
  17. if hasattr(task, "run"):
  18. is_class = True
  19. task_name = task.name
  20. if task_name in self.data:
  21. raise self.AlreadyRegistered(
  22. "Task with name %s is already registered." % task_name)
  23. if is_class:
  24. self.data[task_name] = task() # instantiate Task class
  25. else:
  26. self.data[task_name] = task
  27. def unregister(self, task_name):
  28. if hasattr(task_name, "run"):
  29. task_name = task_name.name
  30. if task_name not in self.data:
  31. raise self.NotRegistered(
  32. "Task with name %s is not registered." % task_name)
  33. del self.data[task_name]
  34. def get_all(self):
  35. """Get all task types."""
  36. return self.data
  37. def get_task(self, task_name):
  38. """Get task by name."""
  39. return self.data[task_name]
  40. """This is the global task registry."""
  41. tasks = TaskRegistry()