[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