diff options
author | Rafael H. Schloming <rhs@apache.org> | 2009-12-28 12:43:50 +0000 |
---|---|---|
committer | Rafael H. Schloming <rhs@apache.org> | 2009-12-28 12:43:50 +0000 |
commit | 6af417b0c740bc292c4a621959b83a4418432533 (patch) | |
tree | 06eefe9166a20c3c7325b4d9cfa8f3cfd300db02 | |
parent | 834e957e52285da7c0935f2bf0a42fe555546a4f (diff) | |
download | qpid-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.py | 13 | ||||
-rw-r--r-- | python/qpid/tests/address.py | 20 |
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"}) |