Przeglądaj źródła

Raise helpful error when backend class is a Python module. Closes #2945

Ask Solem 9 lat temu
rodzic
commit
4ff2df2b96
1 zmienionych plików z 9 dodań i 3 usunięć
  1. 9 3
      celery/backends/__init__.py

+ 9 - 3
celery/backends/__init__.py

@@ -9,7 +9,9 @@
 from __future__ import absolute_import
 
 import sys
+import types
 
+from celery.exceptions import ImproperlyConfigured
 from celery.local import Proxy
 from celery._state import current_app
 from celery.five import reraise
@@ -47,10 +49,14 @@ def get_backend_cls(backend=None, loader=None):
     loader = loader or current_app.loader
     aliases = dict(BACKEND_ALIASES, **loader.override_backends)
     try:
-        return symbol_by_name(backend, aliases)
+        cls = symbol_by_name(backend, aliases)
     except ValueError as exc:
-        reraise(ValueError, ValueError(UNKNOWN_BACKEND.format(
-            backend, exc)), sys.exc_info()[2])
+        reraise(ImproperlyConfigured, ImproperlyConfigured(
+            UNKNOWN_BACKEND.format(backend, exc)), sys.exc_info()[2])
+    if isinstance(cls, types.ModuleType):
+        raise ImproperlyConfigured(UNKNOWN_BACKEND.format(
+            backend, 'is a Python module, not a backend class.'))
+    return cls
 
 
 def get_backend_by_url(backend=None, loader=None):