Browse Source

Support chaining chains together. Issue #1656

Ask Solem 11 years ago
parent
commit
c4f4ad1491
1 changed files with 6 additions and 2 deletions
  1. 6 2
      celery/app/builtins.py

+ 6 - 2
celery/app/builtins.py

@@ -222,7 +222,7 @@ def add_group_task(app):
 
 @shared_task
 def add_chain_task(app):
-    from celery.canvas import Signature, chord, group, maybe_signature
+    from celery.canvas import Signature, chain, chord, group, maybe_signature
     _app = app
 
     class Chain(app.Task):
@@ -244,7 +244,11 @@ def add_chain_task(app):
                 res = task.freeze()
                 i += 1
 
-                if isinstance(task, group) and steps and \
+                if isinstance(task, chain):
+                    # splice the chain
+                    steps.extendleft(reversed(task.tasks))
+                    continue
+                elif isinstance(task, group) and steps and \
                         not isinstance(steps[0], group):
                     # automatically upgrade group(..) | s to chord(group, s)
                     try: