diff options
| author | Kenneth Anthony Giusti <kgiusti@apache.org> | 2010-09-23 16:28:09 +0000 |
|---|---|---|
| committer | Kenneth Anthony Giusti <kgiusti@apache.org> | 2010-09-23 16:28:09 +0000 |
| commit | ab25175c11c7d0e9bfa46e004d8617cb3f7a3ab7 (patch) | |
| tree | 978da29a402dde7665708438a75628a981710144 | |
| parent | a576f56d266abcd9d4cf68384b2d4ff6a115f3d3 (diff) | |
| download | qpid-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.py | 58 |
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: |
