| 
					
				 | 
			
			
				@@ -21,18 +21,23 @@ from celery.concurrency.base import BasePool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from celery.datastructures import ExceptionInfo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from celery.exceptions import (RetryTaskError, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                WorkerLostError, InvalidTaskError) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from celery.task.trace import eager_trace_task, TraceInfo, mro_lookup 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from celery.task.trace import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    trace_task, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    trace_task_ret, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TraceInfo, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    mro_lookup, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    build_tracer, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from celery.result import AsyncResult 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from celery.task import task as task_dec 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from celery.task.base import Task 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from celery.utils import uuid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from celery.worker import job as module 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from celery.worker.job import Request, TaskRequest, execute_and_trace 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from celery.worker.job import Request, TaskRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from celery.worker.state import revoked 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from celery.tests.utils import Case 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 scratch = {"ACK": False} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 some_kwargs_scratchpad = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -68,8 +73,10 @@ class test_mro_lookup(Case): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def jail(task_id, name, args, kwargs): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     request = {"id": task_id} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return eager_trace_task(current_app.tasks[name], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            task_id, args, kwargs, request=request, eager=False)[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    task = current_app.tasks[name] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    task.__trace__ = None  # rebuild 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return trace_task(task, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            task_id, args, kwargs, request=request, eager=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def on_ack(*args, **kwargs): 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -221,6 +228,7 @@ class MockEventDispatcher(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class test_TaskRequest(Case): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def test_task_wrapper_repr(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tw = TaskRequest(mytask.name, uuid(), [1], {"f": "x"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.assertTrue(repr(tw)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -262,8 +270,11 @@ class test_TaskRequest(Case): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             einfo = ExceptionInfo() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             tw.on_failure(einfo) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             self.assertIn("task-retried", tw.eventer.sent) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            tw._does_info = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            tw.on_failure(einfo) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            prev, module._does_info = module._does_info, False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                tw.on_failure(einfo) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            finally: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                module._does_info = prev 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             einfo.internal = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             tw.on_failure(einfo) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -408,8 +419,11 @@ class test_TaskRequest(Case): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tw = TaskRequest(mytask.name, uuid(), [1], {"f": "x"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tw.on_accepted(pid=os.getpid(), time_accepted=time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.assertTrue(tw.acknowledged) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        tw._does_debug = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        tw.on_accepted(pid=os.getpid(), time_accepted=time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        prev, module._does_debug = module._does_debug, False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tw.on_accepted(pid=os.getpid(), time_accepted=time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        finally: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            module._does_debug = prev 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def test_on_accepted_acks_late(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tw = TaskRequest(mytask.name, uuid(), [1], {"f": "x"}) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -432,9 +446,12 @@ class test_TaskRequest(Case): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tw = TaskRequest(mytask.name, uuid(), [1], {"f": "x"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tw.time_start = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tw.on_success(42) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        tw._does_info = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        tw.on_success(42) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        self.assertFalse(tw.acknowledged) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        prev, module._does_info = module._does_info, False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tw.on_success(42) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.assertFalse(tw.acknowledged) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        finally: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            module._does_info = prev 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def test_on_success_BaseException(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         tw = TaskRequest(mytask.name, uuid(), [1], {"f": "x"}) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -539,8 +556,10 @@ class test_TaskRequest(Case): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         finally: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             mytask.ignore_result = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def test_execute_and_trace(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        res = execute_and_trace(mytask.name, uuid(), [4], {}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def test_trace_task_ret(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mytask.__trace__ = build_tracer(mytask.name, mytask, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        current_app.loader, "test") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        res = trace_task_ret(mytask.name, uuid(), [4], {}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.assertEqual(res, 4 ** 4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def test_execute_safe_catches_exception(self): 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -554,8 +573,7 @@ class test_TaskRequest(Case): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         with self.assertWarnsRegex(RuntimeWarning, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 r'Exception raised outside'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            res = execute_and_trace(raising.name, uuid(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    [], {}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            res = trace_task(raising, uuid(), [], {}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             self.assertIsInstance(res, ExceptionInfo) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def test_worker_task_trace_handle_retry(self): 
			 |