| 
					
				 | 
			
			
				@@ -265,26 +265,25 @@ class Celery(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     sum([len(args), len(opts)]))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return inner_create_task_cls(**opts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def _task_from_fun(self, fun, name=None, **options): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _task_from_fun(self, fun, name=None, base=None, bind=False, **options): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if not self.finalized and not self.autofinalize: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             raise RuntimeError('Contract breach: app not finalized') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        base = options.pop('base', None) or self.Task 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        bind = options.pop('bind', False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         name = name or gen_task_name(self, fun.__name__, fun.__module__) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        T = type(fun.__name__, (base, ), dict({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            'app': self, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            'name': name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            'run': fun if bind else staticmethod(fun), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '_decorated': True, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '__doc__': fun.__doc__, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '__module__': fun.__module__, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '__wrapped__': fun}, **options))() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if T.name not in self._tasks: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            self._tasks.register(T) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            T.bind(self)  # connects task to this app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        task = self._tasks[T.name]  # return global instance. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        base = base or self.Task 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if name not in self._tasks: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            task = type(fun.__name__, (base, ), dict({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'app': self, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'name': name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'run': fun if bind else staticmethod(fun), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '_decorated': True, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '__doc__': fun.__doc__, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '__module__': fun.__module__, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                '__wrapped__': fun}, **options))() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self._tasks[task.name] = task 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            task.bind(self)  # connects task to this app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            task = self._tasks[name] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return task 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def finalize(self, auto=False): 
			 |