ソースを参照

CELERY_BACKEND must now include the backend class name if not an alias.
All Backend classes renamed from Backend to, e.g. RedisBackend,
DatabaseBackend, AMQPBackend, MongoBackend.

Ask Solem 15 年 前
コミット
d06b47b45f

+ 29 - 7
celery/backends/__init__.py

@@ -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
 

+ 2 - 2
celery/backends/amqp.py

@@ -7,7 +7,7 @@ from celery.backends.base import BaseBackend
 RESULTSTORE_EXCHANGE = "celeryresults"
 
 
-class Backend(BaseBackend):
+class AMQPBackend(BaseBackend):
     """AMQP backend. Publish results by sending messages to the broker
     using the task id as routing key.
 
@@ -20,7 +20,7 @@ class Backend(BaseBackend):
     capabilities = ["ResultStore"]
 
     def __init__(self, *args, **kwargs):
-        super(Backend, self).__init__(*args, **kwargs)
+        super(AMQPBackend, self).__init__(*args, **kwargs)
         self.connection = DjangoBrokerConnection()
         self._cache = {}
 

+ 1 - 1
celery/backends/cache.py

@@ -40,7 +40,7 @@ except InvalidCacheBackendError:
     pass
 
 
-class Backend(KeyValueStoreBackend):
+class CacheBackend(KeyValueStoreBackend):
     """Backend using the Django cache framework to store task metadata."""
 
     def get(self, key):

+ 2 - 2
celery/backends/database.py

@@ -3,13 +3,13 @@ from celery.models import TaskMeta
 from celery.backends.base import BaseBackend
 
 
-class Backend(BaseBackend):
+class DatabaseBackend(BaseBackend):
     """The database backends. Using Django models to store task metadata."""
 
     capabilities = ["ResultStore"]
 
     def __init__(self, *args, **kwargs):
-        super(Backend, self).__init__(*args, **kwargs)
+        super(DatabaseBackend, self).__init__(*args, **kwargs)
         self._cache = {}
 
     def store_result(self, task_id, result, status, traceback=None):

+ 2 - 2
celery/backends/mongodb.py

@@ -19,7 +19,7 @@ class Bunch:
         self.__dict__.update(kw)
 
 
-class Backend(BaseBackend):
+class MongoBackend(BaseBackend):
 
     capabilities = ["ResultStore"]
 
@@ -59,7 +59,7 @@ class Backend(BaseBackend):
             self.mongodb_taskmeta_collection = conf.get(
                 'taskmeta_collection', self.mongodb_taskmeta_collection)
 
-        super(Backend, self).__init__(*args, **kwargs)
+        super(MongoBackend, self).__init__(*args, **kwargs)
         self._cache = {}
         self._connection = None
         self._database = None

+ 2 - 2
celery/backends/redis.py

@@ -9,7 +9,7 @@ except ImportError:
 from celery.loaders import settings
 
 
-class Backend(KeyValueStoreBackend):
+class RedisBackend(KeyValueStoreBackend):
     """Redis based task backend store.
 
     .. attribute:: redis_host
@@ -54,7 +54,7 @@ class Backend(KeyValueStoreBackend):
             raise ImproperlyConfigured(
                 "In order to use the Redis result store backend, you have to "
                 "set the REDIS_HOST and REDIS_PORT settings")
-        super(Backend, self).__init__()
+        super(RedisBackend, self).__init__()
         self._connection = None
 
     def open(self):

+ 2 - 2
celery/backends/tyrant.py

@@ -9,7 +9,7 @@ from celery.backends.base import KeyValueStoreBackend
 from celery.loaders import settings
 
 
-class Backend(KeyValueStoreBackend):
+class TyrantBackend(KeyValueStoreBackend):
     """Tokyo Cabinet based task backend store.
 
     .. attribute:: tyrant_host
@@ -46,7 +46,7 @@ class Backend(KeyValueStoreBackend):
             raise ImproperlyConfigured(
                 "To use the Tokyo Tyrant backend, you have to "
                 "set the TT_HOST and TT_PORT settings in your settings.py")
-        super(Backend, self).__init__()
+        super(TyrantBackend, self).__init__()
         self._connection = None
 
     def open(self):

+ 1 - 1
celery/tests/test_backends/test_cache.py

@@ -1,5 +1,5 @@
 import unittest
-from celery.backends.cache import Backend as CacheBackend
+from celery.backends.cache import CacheBackend
 from celery.utils import gen_unique_id
 
 

+ 2 - 2
celery/tests/test_backends/test_database.py

@@ -1,5 +1,5 @@
 import unittest
-from celery.backends.database import Backend
+from celery.backends.database import DatabaseBackend
 from celery.utils import gen_unique_id
 from celery.task import PeriodicTask
 from celery import registry
@@ -23,7 +23,7 @@ class MyPeriodicTask(PeriodicTask):
 class TestDatabaseBackend(unittest.TestCase):
 
     def test_backend(self):
-        b = Backend()
+        b = DatabaseBackend()
         tid = gen_unique_id()
 
         self.assertFalse(b.is_successful(tid))

+ 1 - 1
celery/tests/test_backends/test_tyrant.py

@@ -3,7 +3,7 @@ import unittest
 import errno
 import socket
 from celery.backends import tyrant
-from celery.backends.tyrant import Backend as TyrantBackend
+from celery.backends.tyrant import TyrantBackend
 from celery.utils import gen_unique_id
 from django.core.exceptions import ImproperlyConfigured