|  | @@ -1,3 +1,5 @@
 | 
	
		
			
				|  |  | +from __future__ import with_statement
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  import sys
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  from optparse import OptionParser, make_option as Option
 | 
	
	
		
			
				|  | @@ -19,8 +21,8 @@ class Error(Exception):
 | 
	
		
			
				|  |  |      pass
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -def command(fun):
 | 
	
		
			
				|  |  | -    commands[fun.__name__] = fun
 | 
	
		
			
				|  |  | +def command(fun, name=None):
 | 
	
		
			
				|  |  | +    commands[name or fun.__name__] = fun
 | 
	
		
			
				|  |  |      return fun
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -104,6 +106,29 @@ class Command(object):
 | 
	
		
			
				|  |  |          return OK, pformat(n)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +class list_(Command):
 | 
	
		
			
				|  |  | +    args = "<bindings>"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def list_bindings(self, channel):
 | 
	
		
			
				|  |  | +        fmt = lambda q, e, r: self.out("%s %s %s" % (q.ljust(28),
 | 
	
		
			
				|  |  | +                                                     e.ljust(28), r))
 | 
	
		
			
				|  |  | +        fmt("Queue", "Exchange", "Routing Key")
 | 
	
		
			
				|  |  | +        fmt("-" * 16, "-" * 16, "-" * 16)
 | 
	
		
			
				|  |  | +        for binding in channel.list_bindings():
 | 
	
		
			
				|  |  | +            fmt(*binding)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def run(self, what, *_, **kw):
 | 
	
		
			
				|  |  | +        topics = {"bindings": self.list_bindings}
 | 
	
		
			
				|  |  | +        if what not in topics:
 | 
	
		
			
				|  |  | +            raise ValueError("%r not in %r" % (what, topics.keys()))
 | 
	
		
			
				|  |  | +        with self.app.broker_connection() as conn:
 | 
	
		
			
				|  |  | +            consumer = self.app.amqp.get_task_consumer(conn)
 | 
	
		
			
				|  |  | +            consumer.declare()
 | 
	
		
			
				|  |  | +            with conn.channel() as channel:
 | 
	
		
			
				|  |  | +                return topics[what](channel)
 | 
	
		
			
				|  |  | +list_ = command(list_, "list")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  class apply(Command):
 | 
	
		
			
				|  |  |      args = "<task_name>"
 | 
	
		
			
				|  |  |      option_list = Command.option_list + (
 |