diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2008-05-07 16:03:08 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2008-05-07 16:03:08 +0000 |
| commit | 5829e87a54c3bb8972ea993882976f188d866587 (patch) | |
| tree | 550184e8ba728c9a6429edb3be3deab007143444 /qpid/python | |
| parent | 2d64b13938673f4aaba18970fac00e02efe1ce8a (diff) | |
| download | qpid-python-5829e87a54c3bb8972ea993882976f188d866587.tar.gz | |
QPID-979: added convenience accessors for headers
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@654158 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/python')
| -rwxr-xr-x | qpid/python/examples/request-response/server.py | 21 | ||||
| -rw-r--r-- | qpid/python/qpid/datatypes.py | 31 | ||||
| -rw-r--r-- | qpid/python/tests/datatypes.py | 53 |
3 files changed, 91 insertions, 14 deletions
diff --git a/qpid/python/examples/request-response/server.py b/qpid/python/examples/request-response/server.py index 71c3161495..4377571248 100755 --- a/qpid/python/examples/request-response/server.py +++ b/qpid/python/examples/request-response/server.py @@ -7,29 +7,24 @@ import qpid import sys import os -from random import randint from qpid.util import connect from qpid.connection import Connection from qpid.datatypes import Message, RangedSet, uuid4 from qpid.queue import Empty #----- Functions ------------------------------------------- -def getProperty(msg, name): - for h in msg.headers: - if hasattr(h, name): return getattr(h, name) - return None - def respond(session, request): # The routing key for the response is the request's reply-to # property. The body for the response is the request's body, # converted to upper case. - reply_to = getProperty(request,"reply_to") + message_properties = request.get("message_properties") + reply_to = message_properties.reply_to if reply_to == None: - raise Exception("reply to property needs to be there") - - props = session.delivery_properties(routing_key=reply_to["routing_key"]) + raise Exception("reply to property needs to be there") + + props = session.delivery_properties(routing_key=reply_to["routing_key"]) session.message_transfer(reply_to["exchange"],None, None, Message(props,request.body.upper())) #----- Initialization -------------------------------------- @@ -40,16 +35,16 @@ port=len(sys.argv) > 2 and int(sys.argv[2]) or 5672 user="guest" password="guest" amqp_spec="" - + try: amqp_spec = os.environ["AMQP_SPEC"] except KeyError: amqp_spec="/usr/share/amqp/amqp.0-10.xml" - + # Create a connection. conn = Connection (connect (host,port), qpid.spec.load(amqp_spec)) conn.start() - + session_id = str(uuid4()) session = conn.session(session_id) diff --git a/qpid/python/qpid/datatypes.py b/qpid/python/qpid/datatypes.py index 36b290700b..ba9eaa053f 100644 --- a/qpid/python/qpid/datatypes.py +++ b/qpid/python/qpid/datatypes.py @@ -72,11 +72,40 @@ class Message: else: self.body = None if len(args) > 1: - self.headers = args[:-1] + self.headers = list(args[:-1]) else: self.headers = None self.id = None + def has(self, name): + return self.get(name) != None + + def get(self, name): + if self.headers: + for h in self.headers: + if h._type.name == name: + return h + return None + + def set(self, header): + if self.headers is None: + self.headers = [] + idx = 0 + while idx < len(self.headers): + if self.headers[idx]._type == header._type: + self.headers[idx] = header + return + idx += 1 + self.headers.append(header) + + def clear(self, name): + idx = 0 + while idx < len(self.headers): + if self.headers[idx]._type.name == name: + del self.headers[idx] + return + idx += 1 + def __repr__(self): args = [] if self.headers: diff --git a/qpid/python/tests/datatypes.py b/qpid/python/tests/datatypes.py index e4d6723d95..5c6ee82283 100644 --- a/qpid/python/tests/datatypes.py +++ b/qpid/python/tests/datatypes.py @@ -18,6 +18,8 @@ # from unittest import TestCase +from qpid.testlib import testrunner +from qpid.spec010 import load from qpid.datatypes import * class RangedSetTest(TestCase): @@ -109,3 +111,54 @@ class UUIDTest(TestCase): u = uuid4() for i in xrange(1024): assert u != uuid4() + +class MessageTest(TestCase): + + def setUp(self): + self.spec = load(testrunner.get_spec_file("amqp.0-10-qpid-errata.xml")) + self.mp = Struct(self.spec["message.message_properties"]) + self.dp = Struct(self.spec["message.delivery_properties"]) + self.fp = Struct(self.spec["message.fragment_properties"]) + + def testHas(self): + m = Message(self.mp, self.dp, self.fp, "body") + assert m.has("message_properties") + assert m.has("delivery_properties") + assert m.has("fragment_properties") + + def testGet(self): + m = Message(self.mp, self.dp, self.fp, "body") + assert m.get("message_properties") == self.mp + assert m.get("delivery_properties") == self.dp + assert m.get("fragment_properties") == self.fp + + def testSet(self): + m = Message(self.mp, self.dp, "body") + assert m.get("fragment_properties") is None + m.set(self.fp) + assert m.get("fragment_properties") == self.fp + + def testSetOnEmpty(self): + m = Message("body") + assert m.get("delivery_properties") is None + m.set(self.dp) + assert m.get("delivery_properties") == self.dp + + def testSetReplace(self): + m = Message(self.mp, self.dp, self.fp, "body") + dp = Struct(self.spec["message.delivery_properties"]) + assert m.get("delivery_properties") == self.dp + assert m.get("delivery_properties") != dp + m.set(dp) + assert m.get("delivery_properties") != self.dp + assert m.get("delivery_properties") == dp + + def testClear(self): + m = Message(self.mp, self.dp, self.fp, "body") + assert m.get("message_properties") == self.mp + assert m.get("delivery_properties") == self.dp + assert m.get("fragment_properties") == self.fp + m.clear("fragment_properties") + assert m.get("fragment_properties") is None + assert m.get("message_properties") == self.mp + assert m.get("delivery_properties") == self.dp |
