Parcourir la source

Task.retry args/kwargs is now optional. Thanks to David Cramer

Ask Solem il y a 15 ans
Parent
commit
03c9cbda1f
2 fichiers modifiés avec 22 ajouts et 1 suppressions
  1. 1 1
      celery/task/base.py
  2. 21 0
      celery/tests/test_task.py

+ 1 - 1
celery/task/base.py

@@ -278,7 +278,7 @@ class Task(object):
         return apply_async(self, args, kwargs, **options)
 
     @classmethod
-    def retry(self, args, kwargs, exc=None, throw=True, **options):
+    def retry(self, args=None, kwargs=None, exc=None, throw=True, **options):
         """Retry the task.
 
         :param args: Positional arguments to retry with.

+ 21 - 0
celery/tests/test_task.py

@@ -64,6 +64,20 @@ class RetryTask(task.Task):
             return self.retry(args=[arg1, arg2], kwargs=kwargs, countdown=0)
 
 
+class RetryTaskNoArgs(task.Task):
+    max_retries = 3
+    iterations = 0
+
+    def run(self, **kwargs):
+        self.__class__.iterations += 1
+
+        retries = kwargs["task_retries"]
+        if retries >= 3:
+            return 42
+        else:
+            return self.retry(kwargs=kwargs, countdown=0)
+
+
 class RetryTaskMockApply(task.Task):
     max_retries = 3
     iterations = 0
@@ -116,6 +130,13 @@ class TestTaskRetries(unittest.TestCase):
         self.assertEquals(result.get(), 0xFF)
         self.assertEquals(RetryTask.iterations, 4)
 
+    def test_retry_no_args(self):
+        RetryTaskNoArgs.max_retries = 3
+        RetryTaskNoArgs.iterations = 0
+        result = RetryTaskNoArgs.apply()
+        self.assertEquals(result.get(), 42)
+        self.assertEquals(RetryTaskNoArgs.iterations, 4)
+
     def test_retry_not_eager(self):
         exc = Exception("baz")
         try: