| 
					
				 | 
			
			
				@@ -161,11 +161,38 @@ class Command(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if argv is None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             argv = list(sys.argv) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # Should we load any special concurrency environment? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pool_option = self.with_pool_option(argv) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if pool_option: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.maybe_patch_concurrency(argv, *pool_option) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # Dump version and exit if '--version' arg set. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.early_version(argv) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         argv = self.setup_app_from_commandline(argv) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         prog_name = os.path.basename(argv[0]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return self.handle_argv(prog_name, argv[1:]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _find_option_with_arg(self, argv, short_opts=None, long_opts=None): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for i, arg in enumerate(argv): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if arg.startswith('-'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if long_opts and arg.startswith('--'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    name, val = arg.split('=', 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if name in long_opts: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return val 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if short_opts and arg in short_opts: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return argv[i + 1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        raise KeyError('|'.join(short_opts or [] + long_opts or [])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def maybe_patch_concurrency(self, argv, short_opts=None, long_opts=None): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pool = self._find_option_with_arg(argv, short_opts, long_opts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        except KeyError: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            from celery import concurrency 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # set up eventlet/gevent environments ASAP. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            concurrency.get_implementation(pool) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def usage(self, command): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """Returns the command-line usage string for this app.""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return '%%prog [options] %s' % (self.args, ) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -330,6 +357,16 @@ class Command(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     line.strip()).replace('`', '')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return options 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def with_pool_option(self, argv): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        """Returns tuple of ``(short_opts, long_opts)`` if the command 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        supports a pool argument, and used to monkey patch eventlet/gevent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        environments as early as possible. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        E.g:: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              has_pool_option = (['-P'], ['--pool']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def _get_default_app(self, *args, **kwargs): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         from celery.app import default_app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return default_app._get_current_object()  # omit proxy 
			 |