Browse Source

Added ability to specify autoretry with app.task decorator

Dmitry Malinovsky 11 years ago
parent
commit
7a11dc6f2e
2 changed files with 8 additions and 1 deletions
  1. 7 0
      celery/app/base.py
  2. 1 1
      celery/contrib/autoretry.py

+ 7 - 0
celery/app/base.py

@@ -38,6 +38,7 @@ from celery.utils.dispatch import Signal
 from celery.utils.functional import first, maybe_list
 from celery.utils.imports import instantiate, symbol_by_name
 from celery.utils.objects import FallbackContext, mro_lookup
+from celery.contrib.autoretry import autoretry
 
 from .annotations import prepare as prepare_annotations
 from .defaults import DEFAULTS, find_deprecated_settings
@@ -282,6 +283,12 @@ class Celery(object):
                 '__wrapped__': fun}, **options))()
             self._tasks[task.name] = task
             task.bind(self)  # connects task to this app
+
+            autoretry_on = options.get('autoretry_on')
+            retry_kwargs = options.get('retry_kwargs')
+
+            if autoretry_on:
+                task = autoretry(autoretry_on, retry_kwargs)(task)
         else:
             task = self._tasks[name]
         return task

+ 1 - 1
celery/contrib/autoretry.py

@@ -33,7 +33,7 @@ from functools import wraps
 def autoretry(on=None, retry_kwargs=None):
 
     def decorator(task):
-        if not on:
+        if not on or hasattr(task, '_orig_run'):
             return task.run
 
         autoretry_exceptions = tuple(on)  # except only works with tuples