Преглед на файлове

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