[rhmessaging-commits] rhmessaging commits: r2248 - mgmt/trunk/cumin/python/cumin.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Tue Aug 5 16:47:27 EDT 2008


Author: eallen
Date: 2008-08-05 16:47:27 -0400 (Tue, 05 Aug 2008)
New Revision: 2248

Modified:
   mgmt/trunk/cumin/python/cumin/model.py
Log:
Added Queue.bind and Exchange.remove

Modified: mgmt/trunk/cumin/python/cumin/model.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/model.py	2008-08-05 20:43:48 UTC (rev 2247)
+++ mgmt/trunk/cumin/python/cumin/model.py	2008-08-05 20:47:27 UTC (rev 2248)
@@ -1,7 +1,7 @@
-from mint import *
+from mint.schema import *
 from wooly import *
 from wooly.parameters import *
-from time import mktime
+from time import *
 from datetime import datetime, timedelta
 from types import *
 from logging import getLogger
@@ -142,9 +142,6 @@
         else:
             return self.name
         
-    def get_modifier(self, session):
-        pass
-
     def invoke(self, object, args={}):
         invoc = CuminActionInvocation(self, object)
 
@@ -171,6 +168,15 @@
     def do_invoke(self, object, args, completion):
         pass
 
+    def getSessionFromRegistration(self, reg):
+        conn = self.cumin_model.data.getConnectionByRegistration(reg)
+        #for sess in conn.mconn.sessions:
+        #    if conn.mconn.sessions[sess].name == conn.getSessionId():
+        #        #this is active management session
+        #        return conn.mconn.sessions[sess]
+        return conn.mconn.session(str(uuid4()))
+
+
 class CuminActionInvocation(object):
     def __init__(self, action, object):
         self.action = action
@@ -182,10 +188,6 @@
 
     def get_description(self, session):
         verb = self.action.get_title(session)
-        modifier = self.action.get_modifier(session)
-        if modifier:
-            verb = verb + modifier
-
         if self.object:
             cls = self.action.cumin_model.get_class_by_object(self.object)
             object = cls.get_object_title(session, self.object)
@@ -555,6 +557,18 @@
     def get_object_name(self, broker):
         return broker.id
 
+def do_bind(session, queue, binding_info):
+        for exchange in binding_info:
+            if "key" in binding_info[exchange]:
+                binding_key = binding_info[exchange]["key"] 
+            else:
+                binding_key = None
+
+            session.exchange_bind(queue=queue.name,
+                exchange=binding_info[exchange]["name"],
+                binding_key=binding_key,
+                arguments=binding_info[exchange]["arguments"])
+
 class CuminQueue(RemoteClass):
     def __init__(self, model):
         super(CuminQueue, self).__init__(model, "queue", Queue, QueueStats)
@@ -729,6 +743,9 @@
         action = self.Add(self, "add")
         action.summary = True
 
+        action = self.Bind(self, "bind")
+        action.summary = True
+
     def get_title(self, session):
         return "Queue"
 
@@ -761,55 +778,48 @@
             return "Remove"
 
         def do_invoke(self, queue, args, completion):
-            # once qpid management supports queue_delete
-            # replace the rest of this method with 
-            #queue.delete(self.cumin_model.data, completion)
-
             reg = queue.vhost.broker.registration
-            conn = self.cumin_model.data.getConnectionByRegistration(reg)
-            for sess in conn.mconn.sessions:
-                if conn.mconn.sessions[sess].name == conn.getSessionId():
-                    #this is management session
-                    msess = conn.mconn.sessions[sess]
-                    msess.queue_delete(queue=queue.name)
-                    break
+            session = self.getSessionFromRegistration(reg)
+            session.queue_delete(queue=queue.name)
                 
-            #sess = conn.mconn.session(str(uuid4()))
-            #sess.queue_delete(queue=queue.name)
             completion("OK")
 
+    class Bind(CuminAction):
+        def show(self, session, queue):
+            frame = self.cumin_class.show_object(session, queue)
+            frame = frame.show_queue(session, queue)
+            return frame.show_queue_binding_add(session)
+
+        def get_title(self, session):
+            return "Bind"
+
+        def do_invoke(self, queue, args, completion):
+            reg = queue.vhost.broker.registration
+            session = self.getSessionFromRegistration(reg)
+            binding_info = args['exchange_keys']
+            do_bind(session, queue, binding_info)
+
+            completion("OK")
+
     class Add(CuminAction):
         def get_title(self, session):
-            return "Add New Queue"
+            return "Add"
         
-        def get_modifier(self, session):
-            return " to "
-        
         def show(self, session, queue):
             frame = self.cumin_class.show_object(session, queue)
             return frame.show_queue_add(session)
         
-        def do_invoke(self, reg, args, completion):
-            conn = self.cumin_model.data.getConnectionByRegistration(reg)
-            for sess in conn.mconn.sessions:
-                if conn.mconn.sessions[sess].name == conn.getSessionId():
-                    #this is management session
-                    msess = conn.mconn.sessions[sess]
-                    msess.queue_declare(queue=args['queue'], 
-                        exclusive=(args['exclusive'] == "exclusive"), 
-                        durable=(args['durable'] == "durable"), 
-                        auto_delete=(args['auto_delete'] == "autodel"))
-                    
-                    # optionally bind to exchanges
-                    exchange_keys = args['exchange_keys']
-                    for exchange_name in exchange_keys:
-                        msess.exchange_bind(queue=args['queue'],
-                            exchange=exchange_name,
-                            binding_key=exchange_keys[exchange_name])
-                    
-                    break
-                
-                    
+        def do_invoke(self, queue, args, completion):
+            reg = args["reg"]
+            session = self.getSessionFromRegistration(reg)
+            session.queue_declare(queue=queue.name, 
+                        exclusive=queue.exclusive, 
+                        durable=queue.durable, 
+                        auto_delete=queue.autoDelete)
+
+            # optionally bind to exchanges
+            binding_info = args['exchange_keys']
+            do_bind(session, queue, binding_info)
             completion("OK")
 
 class CuminExchange(RemoteClass):
@@ -864,7 +874,9 @@
         stat.unit = "message"
         stat.category = "io"
 
-        action = self.Add(self, "add")
+        self.Add(self, "add")
+
+        action = self.Remove(self, "remove")
         action.summary = True
 
     def show_object(self, session, exchange):
@@ -887,20 +899,32 @@
 
     class Add(CuminAction):
         def get_title(self, session):
-            return "Add New Exchange"
+            return "Add"
         
         def show(self, session, exchange):
             frame = self.cumin_class.show_object(session, exchange)
             return frame.show_exchange_add(session)
         
-        def do_invoke(self, reg, exchange, completion):
-            conn = self.cumin_model.data.getConnectionByRegistration(reg)
-            for sess in conn.mconn.sessions:
-                if conn.mconn.sessions[sess].name == conn.getSessionId():
-                    #this is management session
-                    msess = conn.mconn.sessions[sess]
-                    msess.exchange_declare(exchange=exchange.name, 
+        def do_invoke(self, exchange, reg, completion):
+            session = self.getSessionFromRegistration(reg)
+            session.exchange_declare(exchange=exchange.name, 
                                           type=exchange.type)
+            # if the above call fails, an exception is
+            # raised and we won't get here
+            completion("OK")
+
+    class Remove(CuminAction):
+        def get_title(self, session):
+            return "Remove"
+        
+        def show(self, session, exchange):
+            frame = self.cumin_class.show_object(session, exchange)
+            frame = frame.show_exchange(session, exchange)
+            return frame.show_remove(session)
+        
+        def do_invoke(self, exchange, reg, completion):
+            session = self.getSessionFromRegistration(reg)
+            session.exchange_delete(exchange=exchange.name)
             
             completion("OK")
 
@@ -916,12 +940,34 @@
         stat.title = "Msgs. Matched"
         stat.unit = "message"
 
+        action = self.Remove(self, "remove")
+        action.summary = True
+
     def get_title(self, session):
         return "Binding"
     
     def get_object_name(self, binding):
-        return ""
+        return "between %s and %s" % (binding.exchange.name, binding.queue.name)
 
+    class Remove(CuminAction):
+        def get_title(self, session):
+            return "Remove"
+        
+        def show(self, session, binding):
+            frame = self.cumin_class.show_object(session, binding)
+            frame = frame.show_exchange(session, binding)
+            return frame.show_remove(session)
+        
+        def do_invoke(self, binding, args, completion):
+            reg = binding.exchange.vhost.broker.registration
+            session = self.getSessionFromRegistration(reg)
+            session.exchange_unbind (queue=binding.queue.name, 
+                                     exchange=binding.exchange.name, 
+                                     binding_key=binding.bindingKey)
+ 
+            completion("OK")
+
+
 class CuminRoute(RemoteClass):
     def __init__(self, model):
         super(CuminRoute, self).__init__(model, "route",




More information about the rhmessaging-commits mailing list