Kaynağa Gözat

Adds support for backend aliases using setuptool entry-points

Ask Solem 8 yıl önce
ebeveyn
işleme
f4cf5346d8

+ 5 - 2
celery/backends/__init__.py

@@ -9,7 +9,7 @@ from celery.exceptions import ImproperlyConfigured
 from celery.local import Proxy
 from celery._state import current_app
 from celery.five import reraise
-from celery.utils.imports import symbol_by_name
+from celery.utils.imports import load_extension_class_names, symbol_by_name
 
 __all__ = ['get_backend_cls', 'get_backend_by_url']
 
@@ -39,11 +39,14 @@ BACKEND_ALIASES = {
 default_backend = Proxy(lambda: current_app.backend)
 
 
-def get_backend_cls(backend=None, loader=None):
+def get_backend_cls(backend=None, loader=None,
+                    extension_namespace='celery.result_backends'):
     """Get backend class by name/alias"""
     backend = backend or 'disabled'
     loader = loader or current_app.loader
     aliases = dict(BACKEND_ALIASES, **loader.override_backends)
+    aliases.update(
+        load_extension_class_names(extension_namespace) or {})
     try:
         cls = symbol_by_name(backend, aliases)
     except ValueError as exc:

+ 4 - 2
celery/beat.py

@@ -545,9 +545,11 @@ class Service(object):
         self._is_shutdown.set()
         wait and self._is_stopped.wait()  # block until shutdown done.
 
-    def get_scheduler(self, lazy=False, extensions='celery.beat_schedulers'):
+    def get_scheduler(self, lazy=False,
+                      extension_namespace='celery.beat_schedulers'):
         filename = self.schedule_filename
-        aliases = dict(load_extension_class_names(extensions) or {})
+        aliases = dict(
+            load_extension_class_names(extension_namespace) or {})
         return symbol_by_name(self.scheduler_cls, aliases=aliases)(
             app=self.app,
             schedule_filename=filename,

+ 2 - 2
docs/django/first-steps-with-django.rst

@@ -182,11 +182,11 @@ To use this with your project you need to follow these steps:
 
     .. code-block:: python
 
-        CELERY_RESULT_BACKEND = 'django_celery_results.backends:DatabaseBackend'
+        CELERY_RESULT_BACKEND = 'django-db'
 
     For the cache backend you can use:
 
-        CELERY_RESULT_BACKEND = 'django_celery_results.backends:CacheBackend'
+        CELERY_RESULT_BACKEND = 'django-cache'
 
 ``django-celery-beat`` -- Database-backed Periodic Tasks with Admin interface.
 ------------------------------------------------------------------------------