[Twisted-Python] woven nested lists
This is on its way to becoming a FAQ, so when LordVan asked how to do list nesting in woven on the IRC channel, I figured I should post something here rather than just answer the question there. http://www.twistedmatrix.com/users/glyph/py/src/nestedlist.py As it happens, I discovered a woven bug in the process :-). The code here has 2 embedded templates ('template' and 'brokenTemplate'), one of which works with CVS as of a few days ago and one of which works with CVS as of a few minutes ago. You can see my commit message about that if you're interested in the details: http://www.twistedmatrix.com/pipermail/twisted-commits/2002-December/005021.... -- | <`'> | Glyph Lefkowitz: Traveling Sorcerer | | < _/ > | Lead Developer, the Twisted project | | < ___/ > | http://www.twistedmatrix.com |
On Wednesday, December 18, 2002, at 06:26 AM, Glyph Lefkowitz wrote:
As it happens, I discovered a woven bug in the process :-). The code here has 2 embedded templates ('template' and 'brokenTemplate'), one of which works with CVS as of a few days ago and one of which works with CVS as of a few minutes ago. You can see my commit message about that if you're interested in the details:
http://www.twistedmatrix.com/pipermail/twisted-commits/2002-December/ 005021.html
This bug stems from the fact that the List widget used to call getNode itself, thus finding only the first node below it's template node. getPattern will find all the pattern nodes below the widget's template node. The noNesting fix is a great solution, and hopefully will be enough of a fix. Regarding the comment about anonymous lists: The outer list in this case is available using the name "mytable". So the template could be as so: <table model="mytable" view="List"> <tr listItemOf="mytable" view="List"> <td pattern="listItem" view="Text"> </td> </tr> </table> It's only the inner lists that are truly anonymous, because as the List widget is iterating the outer list, it sets the model attribute of the pattern nodes to model="0" model="1" model="2" etc. My first thought is to allow this type of syntax: <table model="mytable" view="List"> <tr listItemOf="mytable" view="List"> <td listItemOf="." view="Text"> </td> </tr> </table> Which would mean "the inner node is a pattern node with the name of the model on top of the model stack", but I'm not sure what that buys us over the current noNesting fix (which certainly is the way things should have worked, and is the way the code worked before the introduction of getPattern) By the way, there is a test of nested lists in test_woven.py. It just counts the number of copied nodes, however, and should probably be updated to check that the *correct* nodes were copied. Thanks Glyph Donovan
participants (2)
-
Donovan Preston
-
Glyph Lefkowitz