|
@@ -1,9 +1,33 @@
|
|
|
-"""celery.backends"""
|
|
|
import sys
|
|
|
from functools import partial
|
|
|
|
|
|
from celery import conf
|
|
|
|
|
|
+BACKEND_ALIASES = {
|
|
|
+ "amqp": "celery.backends.amqp.AMQPBackend",
|
|
|
+ "database": "celery.backends.database.DatabaseBackend",
|
|
|
+ "db": "celery.backends.database.DatabaseBackend",
|
|
|
+ "redis": "celery.backends.redis.RedisBackend",
|
|
|
+ "cache": "celery.backends.cache.CacheBackend",
|
|
|
+ "mongodb": "celery.backends.mongodb.MongoBackend",
|
|
|
+ "tyrant": "celery.backends.tyrant.TyrantBackend",
|
|
|
+}
|
|
|
+
|
|
|
+_backend_cache = {}
|
|
|
+
|
|
|
+
|
|
|
+def resolve_backend(backend):
|
|
|
+ backend = BACKEND_ALIASES.get(backend, backend)
|
|
|
+ backend_module_name, _, backend_cls_name = backend.rpartition(".")
|
|
|
+ return backend_module_name, backend_cls_name
|
|
|
+
|
|
|
+
|
|
|
+def _get_backend_cls(backend):
|
|
|
+ backend_module_name, backend_cls_name = resolve_backend(backend)
|
|
|
+ __import__(backend_module_name)
|
|
|
+ backend_module = sys.modules[backend_module_name]
|
|
|
+ return getattr(backend_module, backend_cls_name)
|
|
|
+
|
|
|
|
|
|
def get_backend_cls(backend):
|
|
|
"""Get backend class by name.
|
|
@@ -13,11 +37,10 @@ def get_backend_cls(backend):
|
|
|
``"database"`` becomes ``"celery.backends.database"``.
|
|
|
|
|
|
"""
|
|
|
- if backend.find(".") == -1:
|
|
|
- backend = "celery.backends.%s" % backend
|
|
|
- __import__(backend)
|
|
|
- backend_module = sys.modules[backend]
|
|
|
- return getattr(backend_module, "Backend")
|
|
|
+ if backend not in _backend_cache:
|
|
|
+ _backend_cache[backend] = _get_backend_cls(backend)
|
|
|
+ return _backend_cache[backend]
|
|
|
+
|
|
|
|
|
|
"""
|
|
|
.. function:: get_default_backend_cls()
|
|
@@ -37,7 +60,6 @@ get_default_backend_cls = partial(get_backend_cls, conf.CELERY_BACKEND)
|
|
|
"""
|
|
|
DefaultBackend = get_default_backend_cls()
|
|
|
|
|
|
-
|
|
|
"""
|
|
|
.. data:: default_backend
|
|
|
|