Browse Source

Update task.update_state to accept variadic kwargs (#5017)

* Update task.update_state to accept variadic kwargs

Enable passing extra fields to database backends.

* Update tests to test kwargs on update_state method

* Fix Flake8 errors
Christopher Dignam 6 years ago
parent
commit
6651e14598
2 changed files with 6 additions and 3 deletions
  1. 2 2
      celery/app/task.py
  2. 4 1
      t/unit/tasks/test_tasks.py

+ 2 - 2
celery/app/task.py

@@ -900,7 +900,7 @@ class Task(object):
         self.backend.add_to_chord(self.request.group, result)
         return sig.delay() if not lazy else sig
 
-    def update_state(self, task_id=None, state=None, meta=None):
+    def update_state(self, task_id=None, state=None, meta=None, **kwargs):
         """Update task state.
 
         Arguments:
@@ -911,7 +911,7 @@ class Task(object):
         """
         if task_id is None:
             task_id = self.request.id
-        self.backend.store_result(task_id, meta, state)
+        self.backend.store_result(task_id, meta, state, **kwargs)
 
     def on_success(self, retval, task_id, args, kwargs):
         """Success handler.

+ 4 - 1
t/unit/tasks/test_tasks.py

@@ -732,7 +732,10 @@ class test_tasks(TasksCase):
         yyy.push_request()
         try:
             tid = uuid()
-            yyy.update_state(tid, 'FROBULATING', {'fooz': 'baaz'})
+            # update_state should accept arbitrary kwargs, which are passed to
+            # the backend store_result method
+            yyy.update_state(tid, 'FROBULATING', {'fooz': 'baaz'},
+                             arbitrary_kwarg=None)
             assert yyy.AsyncResult(tid).status == 'FROBULATING'
             assert yyy.AsyncResult(tid).result == {'fooz': 'baaz'}