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