summaryrefslogtreecommitdiff
path: root/qpid/python
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2008-05-07 16:03:08 +0000
committerRafael H. Schloming <rhs@apache.org>2008-05-07 16:03:08 +0000
commit5829e87a54c3bb8972ea993882976f188d866587 (patch)
tree550184e8ba728c9a6429edb3be3deab007143444 /qpid/python
parent2d64b13938673f4aaba18970fac00e02efe1ce8a (diff)
downloadqpid-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-xqpid/python/examples/request-response/server.py21
-rw-r--r--qpid/python/qpid/datatypes.py31
-rw-r--r--qpid/python/tests/datatypes.py53
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