Browse 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 15 years ago
parent
commit
79c4433b68
3 changed files with 20 additions and 3 deletions
  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