summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2009-12-28 12:43:50 +0000
committerRafael H. Schloming <rhs@apache.org>2009-12-28 12:43:50 +0000
commit6af417b0c740bc292c4a621959b83a4418432533 (patch)
tree06eefe9166a20c3c7325b4d9cfa8f3cfd300db02
parent834e957e52285da7c0935f2bf0a42fe555546a4f (diff)
downloadqpid-python-6af417b0c740bc292c4a621959b83a4418432533.tar.gz
allow any value as a map key
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/qpid.rnr@894161 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--python/qpid/address.py13
-rw-r--r--python/qpid/tests/address.py20
2 files changed, 23 insertions, 10 deletions
diff --git a/python/qpid/address.py b/python/qpid/address.py
index 6228ac757b..bda7157a5f 100644
--- a/python/qpid/address.py
+++ b/python/qpid/address.py
@@ -102,8 +102,8 @@ class AddressParser(Parser):
result = {}
while True:
- if self.matches(ID):
- n, v = self.nameval()
+ if self.matches(NUMBER, STRING, ID, LBRACE, LBRACK):
+ n, v = self.keyval()
result[n] = v
if self.matches(COMMA):
self.eat(COMMA)
@@ -114,16 +114,17 @@ class AddressParser(Parser):
elif self.matches(RBRACE):
break
else:
- raise ParseError(self.next(), ID, RBRACE)
+ raise ParseError(self.next(), NUMBER, STRING, ID, LBRACE, LBRACK,
+ RBRACE)
self.eat(RBRACE)
return result
- def nameval(self):
- name = self.eat(ID).value
+ def keyval(self):
+ key = self.value()
self.eat(COLON)
val = self.value()
- return (name, val)
+ return (key, val)
def value(self):
if self.matches(NUMBER, STRING, ID):
diff --git a/python/qpid/tests/address.py b/python/qpid/tests/address.py
index 7c101eee5e..8a1a8dcc63 100644
--- a/python/qpid/tests/address.py
+++ b/python/qpid/tests/address.py
@@ -136,12 +136,13 @@ class AddressTests(ParserBase, Test):
def testBadOptions1(self):
self.invalid("name/subject; {",
- "expecting (ID, RBRACE), got EOF line:1,15:name/subject; {")
+ "expecting (NUMBER, STRING, ID, LBRACE, LBRACK, RBRACE), "
+ "got EOF line:1,15:name/subject; {")
def testBadOptions2(self):
self.invalid("name/subject; { 3",
- "expecting (ID, RBRACE), got NUMBER('3') "
- "line:1,16:name/subject; { 3")
+ "expecting COLON, got EOF "
+ "line:1,17:name/subject; { 3")
def testBadOptions3(self):
self.invalid("name/subject; { key:",
@@ -160,7 +161,7 @@ class AddressTests(ParserBase, Test):
def testBadOptions6(self):
self.invalid("name/subject; { key: value,",
- "expecting (ID, RBRACE), got EOF "
+ "expecting (NUMBER, STRING, ID, LBRACE, LBRACK, RBRACE), got EOF "
"line:1,27:name/subject; { key: value,")
def testBadOptions7(self):
@@ -197,3 +198,14 @@ class AddressTests(ParserBase, Test):
def testBadList4(self):
self.invalid("name/subject; { key: [ 1 2 ] }", "expecting (COMMA, RBRACK), "
"got NUMBER('2') line:1,25:name/subject; { key: [ 1 2 ] }")
+
+ def testMap1(self):
+ self.valid("name/subject; { 'key': value }",
+ "name", "subject", {"key": "value"})
+
+ def testMap2(self):
+ self.valid("name/subject; { 1: value }", "name", "subject", {1: "value"})
+
+ def testMap3(self):
+ self.valid('name/subject; { "foo.bar": value }',
+ "name", "subject", {"foo.bar": "value"})