Browse Source

Resolve #153, whitelist errors to skip admin email

Gunnlaugur Thor Briem 14 years ago
parent
commit
31ef7e771e
3 changed files with 11 additions and 1 deletions
  1. 1 0
      celery/conf.py
  2. 6 0
      celery/loaders/default.py
  3. 4 1
      celery/worker/job.py

+ 1 - 0
celery/conf.py

@@ -150,6 +150,7 @@ CELERYD_MAX_TASKS_PER_CHILD = _get("CELERYD_MAX_TASKS_PER_CHILD")
 STORE_ERRORS_EVEN_IF_IGNORED = _get("CELERY_STORE_ERRORS_EVEN_IF_IGNORED")
 CELERY_SEND_TASK_ERROR_EMAILS = _get("CELERY_SEND_TASK_ERROR_EMAILS", False,
                                      compat=["SEND_CELERY_TASK_ERROR_EMAILS"])
+CELERY_TASK_ERROR_WHITELIST = _get("CELERY_TASK_ERROR_WHITELIST")
 CELERYD_LOG_FORMAT = _get("CELERYD_LOG_FORMAT",
                           compat=["CELERYD_DAEMON_LOG_FORMAT"])
 CELERYD_TASK_LOG_FORMAT = _get("CELERYD_TASK_LOG_FORMAT")

+ 6 - 0
celery/loaders/default.py

@@ -13,6 +13,7 @@ DEFAULT_SETTINGS = {
     "DATABASE_NAME": "celery.sqlite",
     "INSTALLED_APPS": ("celery", ),
     "CELERY_IMPORTS": (),
+    "CELERY_TASK_ERROR_WHITELIST": (),
 }
 
 DEFAULT_UNCONFIGURED_SETTINGS = {
@@ -52,6 +53,11 @@ class Loader(BaseLoader):
         installed_apps = set(list(DEFAULT_SETTINGS["INSTALLED_APPS"]) + \
                              list(settings.INSTALLED_APPS))
         settings.INSTALLED_APPS = tuple(installed_apps)
+        settings.CELERY_TASK_ERROR_WHITELIST = tuple(
+                getattr(import_module(mod), clas)
+                for fqn in settings.CELERY_TASK_ERROR_WHITELIST
+                for mod, clas in (fqn.rsplit('.', 1),)
+                )
 
         return settings
 

+ 4 - 1
celery/worker/job.py

@@ -414,7 +414,10 @@ class TaskRequest(object):
 
         task_obj = tasks.get(self.task_name, object)
         send_error_email = conf.CELERY_SEND_TASK_ERROR_EMAILS and not \
-                                task_obj.disable_error_emails
+                                task_obj.disable_error_emails and not any(
+                                    isinstance(exc_info.exception, whexc)
+                                    for whexc in
+                                    conf.CELERY_TASK_ERROR_WHITELIST)
         if send_error_email:
             subject = self.email_subject.strip() % context
             body = self.email_body.strip() % context