Author: rhs
Date: Thu Dec 17 04:56:17 2009
New Revision: 891536
URL: http://svn.apache.org/viewvc?rev=891536&view=rev
Log:
QPID-2286: added list support to address parser
Modified:
qpid/trunk/qpid/python/qpid/address.py
qpid/trunk/qpid/python/qpid/tests/address.py
Modified: qpid/trunk/qpid/python/qpid/address.py
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/address.py?rev=891536&r1=891535&r2=891536&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/address.py (original)
+++ qpid/trunk/qpid/python/qpid/address.py Thu Dec 17 04:56:17 2009
@@ -24,6 +24,8 @@
LBRACE = l.define("LBRACE", r"\{")
RBRACE = l.define("RBRACE", r"\}")
+LBRACK = l.define("LBRACK", r"\[")
+RBRACK = l.define("RBRACK", r"\]")
COLON = l.define("COLON", r":")
SEMI = l.define("SEMI", r";")
SLASH = l.define("SLASH", r"/")
@@ -128,8 +130,30 @@
return tok2obj(self.eat())
elif self.matches(LBRACE):
return self.map()
+ elif self.matches(LBRACK):
+ return self.list()
else:
- raise ParseError(self.next(), NUMBER, STRING, ID, LBRACE)
+ raise ParseError(self.next(), NUMBER, STRING, ID, LBRACE, LBRACK)
+
+ def list(self):
+ self.eat(LBRACK)
+
+ result = []
+
+ while True:
+ if self.matches(RBRACK):
+ break
+ else:
+ result.append(self.value())
+ if self.matches(COMMA):
+ self.eat(COMMA)
+ elif self.matches(RBRACK):
+ break
+ else:
+ raise ParseError(self.next(), COMMA, RBRACK)
+
+ self.eat(RBRACK)
+ return result
def parse(addr):
return AddressParser(lex(addr)).parse()
Modified: qpid/trunk/qpid/python/qpid/tests/address.py
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/tests/address.py?rev=891536&r1=891535&r2=891536&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/tests/address.py (original)
+++ qpid/trunk/qpid/python/qpid/tests/address.py Thu Dec 17 04:56:17 2009
@@ -145,7 +145,7 @@
def testBadOptions3(self):
self.invalid("name/subject; { key:",
- "expecting (NUMBER, STRING, ID, LBRACE), got EOF "
+ "expecting (NUMBER, STRING, ID, LBRACE, LBRACK), got EOF "
"line:1,20:name/subject; { key:")
def testBadOptions4(self):
@@ -167,3 +167,33 @@
self.invalid("name/subject; { key: value } asdf",
"expecting EOF, got ID('asdf') "
"line:1,29:name/subject; { key: value } asdf")
+
+ def testList1(self):
+ self.valid("name/subject; { key: [] }", "name", "subject", {"key": []})
+
+ def testList2(self):
+ self.valid("name/subject; { key: ['one'] }", "name", "subject", {"key":
['one']})
+
+ def testList3(self):
+ self.valid("name/subject; { key: [1, 2, 3] }", "name", "subject",
+ {"key": [1, 2, 3]})
+
+ def testList4(self):
+ self.valid("name/subject; { key: [1, [2, 3], 4] }", "name", "subject",
+ {"key": [1, [2, 3], 4]})
+
+ def testBadList1(self):
+ self.invalid("name/subject; { key: [ }", "expecting (NUMBER, STRING, ID,
LBRACE, LBRACK), "
+ "got RBRACE('}') line:1,23:name/subject; { key: [ }")
+
+ def testBadList2(self):
+ self.invalid("name/subject; { key: [ 1 }", "expecting (COMMA, RBRACK), "
+ "got RBRACE('}') line:1,25:name/subject; { key: [ 1 }")
+
+ def testBadList3(self):
+ self.invalid("name/subject; { key: [ 1 2 }", "expecting (COMMA, RBRACK), "
+ "got NUMBER('2') line:1,25:name/subject; { key: [ 1 2 }")
+
+ def testBadList4(self):
+ self.invalid("name/subject; { key: [ 1 2 ] }", "expecting (COMMA, RBRACK),
"
+ "got NUMBER('2') line:1,25:name/subject; { key: [ 1 2 ] }")
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]