summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Anthony Giusti <kgiusti@apache.org>2010-09-23 16:28:09 +0000
committerKenneth Anthony Giusti <kgiusti@apache.org>2010-09-23 16:28:09 +0000
commitab25175c11c7d0e9bfa46e004d8617cb3f7a3ab7 (patch)
tree978da29a402dde7665708438a75628a981710144
parenta576f56d266abcd9d4cf68384b2d4ff6a115f3d3 (diff)
downloadqpid-python-ab25175c11c7d0e9bfa46e004d8617cb3f7a3ab7.tar.gz
QPID-2883: call event handler when v2 events arrive.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1000528 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/extras/qmf/src/py/qmf/console.py58
1 files changed, 44 insertions, 14 deletions
diff --git a/qpid/extras/qmf/src/py/qmf/console.py b/qpid/extras/qmf/src/py/qmf/console.py
index 461cc66a7d..2cda391370 100644
--- a/qpid/extras/qmf/src/py/qmf/console.py
+++ b/qpid/extras/qmf/src/py/qmf/console.py
@@ -3202,6 +3202,18 @@ class Agent:
for omap in content:
context.addV2QueryResult(omap)
context.processV2Data()
+ if 'partial' not in ah:
+ context.signal()
+
+ elif kind == "_event":
+ event = Event(self, v2Map=content)
+ if event.classKey is None or event.schema:
+ # schema optional or present
+ context.doEvent(event)
+ else:
+ # schema not optional and not present
+ self._v2SendSchemaRequest(event.classKey)
+ # @todo: event dropped - fix this!
elif kind == "_schema_id":
for sid in content:
@@ -3216,9 +3228,6 @@ class Agent:
# in order to update the schema cache.
context.notifiable(qmf_schema_id=ckey)
- if 'partial' not in ah:
- context.signal()
-
def _v2HandleMethodResp(self, mp, ah, content):
"""
@@ -3627,20 +3636,41 @@ class RequestContext(object):
#===================================================================================================
class Event:
""" """
- def __init__(self, agent, codec):
+ def __init__(self, agent, codec=None, v2Map=None):
self.agent = agent
self.session = agent.session
self.broker = agent.broker
- self.classKey = ClassKey(codec)
- self.classKey._setType(ClassKey.TYPE_EVENT)
- self.timestamp = codec.read_int64()
- self.severity = codec.read_uint8()
- self.arguments = {}
- self.schema = self.session.schemaCache.getSchema(self.classKey)
- if not self.schema:
- return
- for arg in self.schema.arguments:
- self.arguments[arg.name] = self.session._decodeValue(codec, arg.type, self.broker)
+
+ if isinstance(v2Map,dict):
+ self.classKey = None
+ self.schema = None
+ try:
+ self.arguments = v2Map["_values"]
+ self.timestamp = long(v2Map["_timestamp"])
+ self.severity = v2Map["_severity"]
+ if "_schema_id" in v2Map:
+ self.classKey = ClassKey(v2Map["_schema_id"])
+ self.classKey._setType(ClassKey.TYPE_EVENT)
+ except:
+ raise Exception("Invalid event object: %s " % str(v2Map))
+ if self.classKey is not None:
+ self.schema = self.session.schemaCache.getSchema(self.classKey)
+
+ elif codec is not None:
+ self.classKey = ClassKey(codec)
+ self.classKey._setType(ClassKey.TYPE_EVENT)
+ self.timestamp = codec.read_int64()
+ self.severity = codec.read_uint8()
+ self.arguments = {}
+ self.schema = self.session.schemaCache.getSchema(self.classKey)
+ if not self.schema:
+ return
+ for arg in self.schema.arguments:
+ self.arguments[arg.name] = self.session._decodeValue(codec, arg.type,
+ self.broker)
+ else:
+ raise Exception("No constructor for event object.")
+
def __repr__(self):
if self.schema == None: