Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

registry.py 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # -*- coding: utf-8 -*-
  2. """
  3. celery.app.registry
  4. ~~~~~~~~~~~~~~~~~~~
  5. Registry of available tasks.
  6. """
  7. from __future__ import absolute_import
  8. import inspect
  9. from importlib import import_module
  10. from celery._state import get_current_app
  11. from celery.exceptions import NotRegistered
  12. from celery.five import items
  13. __all__ = ['TaskRegistry']
  14. class TaskRegistry(dict):
  15. NotRegistered = NotRegistered
  16. def __missing__(self, key):
  17. raise self.NotRegistered(key)
  18. def register(self, task):
  19. """Register a task in the task registry.
  20. The task will be automatically instantiated if not already an
  21. instance.
  22. """
  23. self[task.name] = inspect.isclass(task) and task() or task
  24. def unregister(self, name):
  25. """Unregister task by name.
  26. :param name: name of the task to unregister, or a
  27. :class:`celery.task.base.Task` with a valid `name` attribute.
  28. :raises celery.exceptions.NotRegistered: if the task has not
  29. been registered.
  30. """
  31. try:
  32. self.pop(getattr(name, 'name', name))
  33. except KeyError:
  34. raise self.NotRegistered(name)
  35. # -- these methods are irrelevant now and will be removed in 4.0
  36. def regular(self):
  37. return self.filter_types('regular')
  38. def periodic(self):
  39. return self.filter_types('periodic')
  40. def filter_types(self, type):
  41. return dict((name, task) for name, task in items(self)
  42. if getattr(task, 'type', 'regular') == type)
  43. def _unpickle_task(name):
  44. return get_current_app().tasks[name]
  45. def _unpickle_task_v2(name, module=None):
  46. if module:
  47. import_module(module)
  48. return get_current_app().tasks[name]