You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2008/05/07 18:03:08 UTC
svn commit: r654158 - in /incubator/qpid/trunk/qpid/python:
examples/request-response/server.py qpid/datatypes.py tests/datatypes.py
Author: rhs
Date: Wed May 7 09:03:08 2008
New Revision: 654158
URL: http://svn.apache.org/viewvc?rev=654158&view=rev
Log:
QPID-979: added convenience accessors for headers
Modified:
incubator/qpid/trunk/qpid/python/examples/request-response/server.py
incubator/qpid/trunk/qpid/python/qpid/datatypes.py
incubator/qpid/trunk/qpid/python/tests/datatypes.py
Modified: incubator/qpid/trunk/qpid/python/examples/request-response/server.py
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/python/examples/request-response/server.py?rev=654158&r1=654157&r2=654158&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/python/examples/request-response/server.py (original)
+++ incubator/qpid/trunk/qpid/python/examples/request-response/server.py Wed May 7 09:03:08 2008
@@ -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 @@
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)
Modified: incubator/qpid/trunk/qpid/python/qpid/datatypes.py
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/python/qpid/datatypes.py?rev=654158&r1=654157&r2=654158&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/python/qpid/datatypes.py (original)
+++ incubator/qpid/trunk/qpid/python/qpid/datatypes.py Wed May 7 09:03:08 2008
@@ -72,11 +72,40 @@
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:
Modified: incubator/qpid/trunk/qpid/python/tests/datatypes.py
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/python/tests/datatypes.py?rev=654158&r1=654157&r2=654158&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/python/tests/datatypes.py (original)
+++ incubator/qpid/trunk/qpid/python/tests/datatypes.py Wed May 7 09:03:08 2008
@@ -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 @@
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