summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2010-08-12 18:37:19 +0000
committerRafael H. Schloming <rhs@apache.org>2010-08-12 18:37:19 +0000
commit0539fb89df2c2822f14bcc473911c6ad3aa0e9a5 (patch)
tree079c2bc5d9457ecdfe8b572b38b1b6d46d87130f /python
parentbab125a6bb8adb04f0fc5d567158617248a5ad07 (diff)
downloadqpid-python-0539fb89df2c2822f14bcc473911c6ad3aa0e9a5.tar.gz
fixed reply-to conversion
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@984906 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python')
-rw-r--r--python/qpid/messaging/driver.py18
-rw-r--r--python/qpid/tests/messaging/message.py24
2 files changed, 37 insertions, 5 deletions
diff --git a/python/qpid/messaging/driver.py b/python/qpid/messaging/driver.py
index 30cc2eb34d..0c7c7e7c4d 100644
--- a/python/qpid/messaging/driver.py
+++ b/python/qpid/messaging/driver.py
@@ -41,15 +41,23 @@ opslog = getLogger("qpid.messaging.io.ops")
def addr2reply_to(addr):
name, subject, options = address.parse(addr)
- return ReplyTo(name, subject)
+ if options:
+ type = options.get("node", {}).get("type")
+ else:
+ type = None
+
+ if type == "topic":
+ return ReplyTo(name, subject)
+ else:
+ return ReplyTo(None, name)
def reply_to2addr(reply_to):
- if reply_to.routing_key is None:
- return reply_to.exchange
- elif reply_to.exchange in (None, ""):
+ if reply_to.exchange in (None, ""):
return reply_to.routing_key
+ elif reply_to.routing_key is None:
+ return "%s; {node: {type: topic}}" % reply_to.exchange
else:
- return "%s/%s" % (reply_to.exchange, reply_to.routing_key)
+ return "%s/%s; {node: {type: topic}}" % (reply_to.exchange, reply_to.routing_key)
class Attachment:
diff --git a/python/qpid/tests/messaging/message.py b/python/qpid/tests/messaging/message.py
index 526a5cfab6..eaa953e7d7 100644
--- a/python/qpid/tests/messaging/message.py
+++ b/python/qpid/tests/messaging/message.py
@@ -117,3 +117,27 @@ class MessageEchoTests(Base):
def testTextPlainEmpty(self):
self.check(Message(content_type="text/plain"))
+
+ def check_rt(self, addr, expected=None):
+ if expected is None:
+ expected = addr
+ msg = Message(reply_to=addr)
+ self.snd.send(msg)
+ echo = self.rcv.fetch(0)
+ assert echo.reply_to == expected, echo.reply_to
+ self.ssn.acknowledge(echo)
+
+ def testReplyTo(self):
+ self.check_rt("name")
+
+ def testReplyToQueue(self):
+ self.check_rt("name; {node: {type: queue}}", "name")
+
+ def testReplyToQueueSubject(self):
+ self.check_rt("name/subject; {node: {type: queue}}", "name")
+
+ def testReplyToTopic(self):
+ self.check_rt("name; {node: {type: topic}}")
+
+ def testReplyToTopicSubject(self):
+ self.check_rt("name/subject; {node: {type: topic}}")