Browse Source

CELERY_TASK_ERROR_WHITELIST now works for all loaders

Ask Solem 14 years ago
parent
commit
92cb74990e
3 changed files with 18 additions and 35 deletions
  1. 6 23
      celery/loaders/default.py
  2. 6 5
      celery/tests/test_app/test_loaders.py
  3. 6 7
      celery/worker/job.py

+ 6 - 23
celery/loaders/default.py

@@ -8,32 +8,12 @@ from celery.exceptions import NotConfigured
 
 DEFAULT_CONFIG_MODULE = "celeryconfig"
 
-DEFAULT_SETTINGS = {
-    "DEBUG": False,
-    "ADMINS": (),
-    "CELERY_IMPORTS": (),
-    "CELERY_TASK_ERROR_WHITELIST": (),
-}
-
-def wanted_module_item(item):
-    return item[0].isupper() and not item.startswith("_")
-
 
 class Loader(BaseLoader):
-    """The default loader.
-
-    See the FAQ for example usage.
-
-    """
+    """The loader used by the default app."""
 
     def setup_settings(self, settingsdict):
-        settings = AttributeDict(DEFAULT_SETTINGS, **settingsdict)
-        settings.CELERY_TASK_ERROR_WHITELIST = tuple(
-                getattr(import_module(mod), cls)
-                    for fqn in settings.CELERY_TASK_ERROR_WHITELIST
-                        for mod, cls in (fqn.rsplit('.', 1), ))
-
-        return settings
+        return AttributeDict(settingsdict)
 
     def read_configuration(self):
         """Read configuration from :file:`celeryconfig.py` and configure
@@ -50,10 +30,13 @@ class Loader(BaseLoader):
         else:
             usercfg = dict((key, getattr(celeryconfig, key))
                             for key in dir(celeryconfig)
-                                if wanted_module_item(key))
+                                if self.wanted_module_item(key))
             self.configured = True
             return self.setup_settings(usercfg)
 
+    def wanted_module_item(self, item):
+        return item[0].isupper() and not item.startswith("_")
+
     def on_worker_init(self):
         """Imports modules at worker init so tasks can be registered
         and used by the worked.

+ 6 - 5
celery/tests/test_app/test_loaders.py

@@ -160,11 +160,12 @@ class TestLoaderBase(unittest.TestCase):
 class TestDefaultLoader(unittest.TestCase):
 
     def test_wanted_module_item(self):
-        self.assertTrue(default.wanted_module_item("FOO"))
-        self.assertTrue(default.wanted_module_item("Foo"))
-        self.assertFalse(default.wanted_module_item("_FOO"))
-        self.assertFalse(default.wanted_module_item("__FOO"))
-        self.assertFalse(default.wanted_module_item("foo"))
+        l = default.Loader()
+        self.assertTrue(l.wanted_module_item("FOO"))
+        self.assertTrue(l.wanted_module_item("Foo"))
+        self.assertFalse(l.wanted_module_item("_FOO"))
+        self.assertFalse(l.wanted_module_item("__FOO"))
+        self.assertFalse(l.wanted_module_item("foo"))
 
     def test_read_configuration(self):
         from types import ModuleType

+ 6 - 7
celery/worker/job.py

@@ -16,7 +16,7 @@ from celery.exceptions import WorkerLostError, RetryTaskError
 from celery.execute.trace import TaskTrace
 from celery.registry import tasks
 from celery.utils import noop, kwdict, fun_takes_kwargs
-from celery.utils import truncate_text
+from celery.utils import get_symbol_by_name, truncate_text
 from celery.utils.compat import log_with_extra
 from celery.utils.encoding import safe_repr, safe_str
 from celery.utils.timeutils import maybe_iso8601
@@ -544,12 +544,11 @@ class TaskRequest(object):
     def send_error_email(self, task, context, exc,
             whitelist=None, enabled=False, fail_silently=True):
         if enabled and not task.disable_error_emails:
-            if whitelist:
-                if not isinstance(exc, tuple(whitelist)):
-                    return
-            subject = self.email_subject.strip() % context
-            body = self.email_body.strip() % context
-            self.app.mail_admins(subject, body, fail_silently=fail_silently)
+            if not whitelist or isinstance(exc,
+                    tuple(map(get_symbol_by_name, whitelist))):
+                subject = self.email_subject.strip() % context
+                body = self.email_body.strip() % context
+                self.app.mail_admins(subject, body, fail_silently=fail_silently)
 
     def repr_result(self, result, maxlen=46):
         # 46 is the length needed to fit