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.

__init__.py 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- coding: utf-8 -*-
  2. """
  3. celery.backends
  4. ~~~~~~~~~~~~~~~
  5. Backend abstract factory (...did I just say that?) and alias definitions.
  6. """
  7. from __future__ import absolute_import
  8. import sys
  9. import types
  10. from celery.exceptions import ImproperlyConfigured
  11. from celery.local import Proxy
  12. from celery._state import current_app
  13. from celery.five import reraise
  14. from celery.utils.imports import symbol_by_name
  15. __all__ = ['get_backend_cls', 'get_backend_by_url']
  16. UNKNOWN_BACKEND = """\
  17. Unknown result backend: {0!r}. Did you spell that correctly? ({1!r})\
  18. """
  19. BACKEND_ALIASES = {
  20. 'amqp': 'celery.backends.amqp:AMQPBackend',
  21. 'rpc': 'celery.backends.rpc.RPCBackend',
  22. 'cache': 'celery.backends.cache:CacheBackend',
  23. 'redis': 'celery.backends.redis:RedisBackend',
  24. 'mongodb': 'celery.backends.mongodb:MongoBackend',
  25. 'db': 'celery.backends.database:DatabaseBackend',
  26. 'database': 'celery.backends.database:DatabaseBackend',
  27. 'cassandra': 'celery.backends.cassandra:CassandraBackend',
  28. 'couchbase': 'celery.backends.couchbase:CouchBaseBackend',
  29. 'disabled': 'celery.backends.base:DisabledBackend',
  30. }
  31. #: deprecated alias to ``current_app.backend``.
  32. default_backend = Proxy(lambda: current_app.backend)
  33. def get_backend_cls(backend=None, loader=None):
  34. """Get backend class by name/alias"""
  35. backend = backend or 'disabled'
  36. loader = loader or current_app.loader
  37. aliases = dict(BACKEND_ALIASES, **loader.override_backends)
  38. try:
  39. cls = symbol_by_name(backend, aliases)
  40. except ValueError as exc:
  41. reraise(ImproperlyConfigured, ImproperlyConfigured(
  42. UNKNOWN_BACKEND.format(backend, exc)), sys.exc_info()[2])
  43. if isinstance(cls, types.ModuleType):
  44. raise ImproperlyConfigured(UNKNOWN_BACKEND.format(
  45. backend, 'is a Python module, not a backend class.'))
  46. return cls
  47. def get_backend_by_url(backend=None, loader=None):
  48. url = None
  49. if backend and '://' in backend:
  50. url = backend
  51. scheme, _, _ = url.partition('://')
  52. if '+' in scheme:
  53. backend, url = url.split('+', 1)
  54. else:
  55. backend = scheme
  56. return get_backend_cls(backend, loader), url