[rhmessaging-commits] rhmessaging commits: r1744 - mgmt/basil/python/basil.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Sat Mar 1 11:38:19 EST 2008


Author: justi9
Date: 2008-03-01 11:38:19 -0500 (Sat, 01 Mar 2008)
New Revision: 1744

Modified:
   mgmt/basil/python/basil/__init__.py
Log:
Correct the way the class info tuple is used.

Get object ids from the values field.  Before I was incorrectly using
the hash from the class info tuple.

Add incomplete method support.

Use the context id to distinguish objects from different brokers.

Keep a set of connections on model.



Modified: mgmt/basil/python/basil/__init__.py
===================================================================
--- mgmt/basil/python/basil/__init__.py	2008-03-01 05:28:13 UTC (rev 1743)
+++ mgmt/basil/python/basil/__init__.py	2008-03-01 16:38:19 UTC (rev 1744)
@@ -9,51 +9,42 @@
     def __init__(self, spec_path):
         self.spec = qpid.spec.load(spec_path)
 
+        self.connections = dict()
         self.packages = list()
 
-        # For later use by BasilObject.method
-        #self.method_sequence = 1
-        #self.outstanding_calls = dict()
+        self.method_sequence = 1
+        self.outstanding_calls = dict()
 
         self.lock = Lock()
 
-    def call_method(self, obj, name, args, callback):
-        pass
-        # For later use by BasilObject.method
-        #method_sequence += 1
-        #self.outstanding_calls[self.method_sequence] = callback
-
-        #self.broker.method(id, obj.mgmt_id, obj.mgmt_name, name, args=args,
-        #                   packageName=obj.mgmt_package)
-
-    def on_schema(self, broker_id, object_info,
+    def on_schema(self, context_id, class_info,
                   configs, metrics, methods, events):
         self.lock.acquire()
         try:
-            package = self.get_package(object_info)
-            package.on_schema(broker_id, object_info,
+            package = self.get_package(class_info)
+            package.on_schema(context_id, class_info,
                               configs, metrics, methods, events)
         finally:
             self.lock.release()
 
-    def on_config(self, broker_id, object_info, values, timestamps):
+    def on_config(self, context_id, class_info, values, timestamps):
         self.lock.acquire()
         try:
-            package = self.get_package(object_info)
-            package.on_config(broker_id, object_info, values, timestamps)
+            package = self.get_package(class_info)
+            package.on_config(context_id, class_info, values, timestamps)
         finally:
             self.lock.release()
 
-    def on_metric(self, broker_id, object_info, values, timestamps):
+    def on_metric(self, context_id, class_info, values, timestamps):
         self.lock.acquire()
         try:
-            package = self.get_package(object_info)
-            package.on_metric(broker_id, object_info, values, timestamps)
+            package = self.get_package(class_info)
+            package.on_metric(context_id, class_info, values, timestamps)
         finally:
             self.lock.release()
 
-    def get_package(self, object_info):
-        name = object_info[0].replace(".", "_")
+    def get_package(self, class_info):
+        name = class_info[0].replace(".", "_")
 
         try:
             package = getattr(self, name)
@@ -71,22 +62,22 @@
 
         self.classes = list()
 
-    def on_schema(self, broker_id, object_info,
+    def on_schema(self, context_id, class_info,
                   configs, metrics, methods, events):
-        cls = self.get_class(object_info)
-        cls.on_schema(broker_id, object_info,
+        cls = self.get_class(class_info)
+        cls.on_schema(context_id, class_info,
                       configs, metrics, methods, events)
 
-    def on_config(self, broker_id, object_info, values, timestamps):
-        cls = self.get_class(object_info)
-        cls.on_config(broker_id, object_info, values, timestamps)
+    def on_config(self, context_id, class_info, values, timestamps):
+        cls = self.get_class(class_info)
+        cls.on_config(context_id, class_info, values, timestamps)
 
-    def on_metric(self, broker_id, object_info, values, timestamps):
-        cls = self.get_class(object_info)
-        cls.on_metric(broker_id, object_info, values, timestamps)
+    def on_metric(self, context_id, class_info, values, timestamps):
+        cls = self.get_class(class_info)
+        cls.on_metric(context_id, class_info, values, timestamps)
 
-    def get_class(self, object_info):
-        name = object_info[1]
+    def get_class(self, class_info):
+        name = class_info[1]
         
         try:
             cls = getattr(self, name)
@@ -106,7 +97,7 @@
         self.name = name
 
         self.objects = list()
-        self.objects_by_id = dict()
+        self.objects_by_composite_id = dict()
 
         attrs = dict()
         attrs["basil_model"] = self.package.model
@@ -114,7 +105,7 @@
         attrs["basil_class"] = self
         self.python_class = type(name, (BasilObject,), attrs)
 
-    def on_schema(self, broker_id, object_info,
+    def on_schema(self, context_id, class_info,
                   configs, metrics, methods, events):
         for spec in configs:
             setattr(self.python_class, spec[0], None)
@@ -128,28 +119,32 @@
         for spec in events:
             pass
 
-    def on_config(self, broker_id, object_info, values, timestamps):
-        object = self.get_object(object_info)
+    def on_config(self, context_id, class_info, values, timestamps):
+        object = self.get_object(class_info, context_id, values)
 
         for name, value in values:
-            if name != "id":
-                setattr(object, name, value)
+            setattr(object, name, value)
 
-    def on_metric(self, broker_id, object_info, values, timestamps):
-        object = self.get_object(object_info)
+    def on_metric(self, context_id, class_info, values, timestamps):
+        object = self.get_object(class_info, context_id, values)
 
         for name, value in values:
             setattr(object, name, value)
 
-    def get_object(self, object_info):
-        id = object_info[2]
+    def get_object(self, class_info, context_id, values):
+        for name, value in values:
+            if name == "id":
+                id = value
+                break
 
+        assert id is not None
+
         try:
-            object = self.objects_by_id[id]
+            object = self.objects_by_composite_id[(context_id, id)]
         except KeyError:
-            object = self.python_class(id)
+            object = self.python_class(class_info, context_id, id)
             self.objects.append(object)
-            self.objects_by_id[id] = object
+            self.objects_by_composite_id[(context_id, id)] = object
 
         return object
 
@@ -157,39 +152,59 @@
         return self.name
 
 class BasilObject(object):
-    def __init__(self, id):
-        self.id = id
+    def __init__(self, class_info, context_id, object_id):
+        self.basil_class_info = class_info
+        self.basil_context_id = context_id
+        self.basil_object_id = object_id
 
-    def method(self, *args, **kwargs):
-        print "method", self, self.basil_model, self.basil_package, self.basil_class, args, kwargs
+    def method(self, name, callback, **kwargs):
+        model = self.basil_model
+        model.lock.acquire()
+        try:
+            model.method_sequence += 1
+            seq = model.method_sequence
+        finally:
+            model.lock.release()
+
+        conn = model.connections[self.basil_context_id]
+        client, chan = conn.client, conn.chan
+
+        model.outstanding_calls[seq] = callback
+
+        client.method(chan, seq, self.basil_object_id, self.basil_class_info,
+                      name, kwargs)
         
     def __repr__(self):
-        return str(self.id)
+        return "%r-%r" % (self.basil_context_id, self.basil_object_id)
 
 class BasilConnection(object):
     def __init__(self, model, host, port):
         self.model = model
         self.host = host
         self.port = port
+        self.context_id = "%s:%i" % (self.host, self.port)
 
         self.client = managementClient(self.model.spec,
                                        None, 
                                        self.model.on_config,
                                        self.model.on_metric,
-                                       "%s:%i" % (self.host, self.port))
+                                       self.context_id)
         self.client.schemaListener(self.model.on_schema)
 
         self.chan = None
 
+        self.model.connections[self.context_id] = self
+
     def open(self):
         client = qpid.client.Client(self.host, self.port, self.model.spec)
         client.start({})
         chan = client.channel(1)
 
         self.chan = managementChannel \
-            (chan, self.client.topicCb, self.client.replyCb)
+            (chan, self.client.topicCb, self.client.replyCb, self.context_id)
 
         self.client.addChannel(self.chan)
 
     def close(self):
         self.client.removeChannel(self.chan)
+        client.close()




More information about the rhmessaging-commits mailing list