Parcourir la source

Default loader now prints warning on missing celeryconfig.py instead of raising ImportError.

celeryd raises ImproperlyConfigured if the configuration is not set up.
Ask Solem il y a 15 ans
Parent
commit
79c4433b68
3 fichiers modifiés avec 20 ajouts et 3 suppressions
  1. 3 0
      celery/bin/celeryd.py
  2. 1 0
      celery/loaders/base.py
  3. 16 3
      celery/loaders/default.py

+ 3 - 0
celery/bin/celeryd.py

@@ -223,6 +223,9 @@ class Worker(object):
         from celery.loaders import current_loader, load_settings
         self.loader = current_loader()
         self.settings = load_settings()
+        if not self.loader.configured:
+            raise ImproperlyConfigured(
+                    "Celery needs to be configured to run celeryd.")
 
     def purge_messages(self):
         discarded_count = discard_all()

+ 1 - 0
celery/loaders/base.py

@@ -20,6 +20,7 @@ class BaseLoader(object):
     _conf_cache = None
     worker_initialized = False
     override_backends = {}
+    configured = False
 
     def on_task_init(self, task_id, task):
         """This method is called before a task is executed."""

+ 16 - 3
celery/loaders/default.py

@@ -1,4 +1,5 @@
 import os
+import warnings
 from importlib import import_module
 
 from celery.loaders.base import BaseLoader
@@ -15,6 +16,10 @@ DEFAULT_SETTINGS = {
 }
 
 
+class NotConfigured(UserWarning):
+    """Celery has not been configured, as no config module has been found."""
+
+
 def wanted_module_item(item):
     return not item.startswith("_")
 
@@ -51,11 +56,19 @@ class Loader(BaseLoader):
         celery and Django so it can be used by regular Python."""
         configname = os.environ.get("CELERY_CONFIG_MODULE",
                                     DEFAULT_CONFIG_MODULE)
-        celeryconfig = import_module(configname)
-        usercfg = dict((key, getattr(celeryconfig, key))
+        try:
+            celeryconfig = import_module(configname)
+        except ImportError, exc:
+            warnings.warn("No celeryconfig.py module found! Please make "
+                          "sure it exists and is available to Python.",
+                          NotConfigured)
+            return self.setup_settings({})
+        else:
+            usercfg = dict((key, getattr(celeryconfig, key))
                             for key in dir(celeryconfig)
                                 if wanted_module_item(key))
-        return self.setup_settings(usercfg)
+            self.configured = True
+            return self.setup_settings(usercfg)
 
     def on_worker_init(self):
         """Imports modules at worker init so tasks can be registered