[Checkins] SVN: Sandbox/malthe/chameleon.genshi/ Fixed bug where the py:choose temporary variables (which are only indirectly scoped) would conflict with other temporary variables.

Malthe Borch mborch at gmail.com
Mon Sep 29 11:03:59 EDT 2008


Log message for revision 91599:
  Fixed bug where the py:choose temporary variables (which are only indirectly scoped) would conflict with other temporary variables.

Changed:
  U   Sandbox/malthe/chameleon.genshi/CHANGES.txt
  U   Sandbox/malthe/chameleon.genshi/src/chameleon/genshi/language.py
  U   Sandbox/malthe/chameleon.genshi/src/chameleon/genshi/language.txt

-=-
Modified: Sandbox/malthe/chameleon.genshi/CHANGES.txt
===================================================================
--- Sandbox/malthe/chameleon.genshi/CHANGES.txt	2008-09-29 15:00:51 UTC (rev 91598)
+++ Sandbox/malthe/chameleon.genshi/CHANGES.txt	2008-09-29 15:03:58 UTC (rev 91599)
@@ -4,10 +4,11 @@
 Head
 ~~~~
 
+- Fixed scoping errors when using ``py:choose`` inside a loop. [malthe]
+
 - Add a specialized TemplateLoader. [wichert]
 
 
-
 1.0a1 (released 9/24/2008)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Modified: Sandbox/malthe/chameleon.genshi/src/chameleon/genshi/language.py
===================================================================
--- Sandbox/malthe/chameleon.genshi/src/chameleon/genshi/language.py	2008-09-29 15:00:51 UTC (rev 91598)
+++ Sandbox/malthe/chameleon.genshi/src/chameleon/genshi/language.py	2008-09-29 15:03:58 UTC (rev 91599)
@@ -112,7 +112,7 @@
         stream = self.stream
         choose_expression = self._pull_attribute(utils.py_attr('choose'))
         if choose_expression is not None:
-            choose_variable = stream.save()
+            choose_variable = stream.new_var()
             
             if choose_expression:
                 self._add_define(choose_variable, choose_expression)
@@ -125,7 +125,7 @@
                 namespaces={'py': config.PY_NS}):
 
                 expression = element._pull_attribute(utils.py_attr('when'))
-                variable = stream.save()
+                variable = stream.new_var()
                 variables.append(variable)
 
                 # add definition to ancestor

Modified: Sandbox/malthe/chameleon.genshi/src/chameleon/genshi/language.txt
===================================================================
--- Sandbox/malthe/chameleon.genshi/src/chameleon/genshi/language.txt	2008-09-29 15:00:51 UTC (rev 91598)
+++ Sandbox/malthe/chameleon.genshi/src/chameleon/genshi/language.txt	2008-09-29 15:03:58 UTC (rev 91599)
@@ -439,22 +439,29 @@
   You can use a loop variable with py:choose:
 
   >>> print render("""\
-  ... <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  ...     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
   ... <html xmlns="http://www.w3.org/1999/xhtml"
   ...       xmlns:py="http://genshi.edgewall.org/">
   ...   <body>
   ...     <div py:for="article in [dict(wfstate='new'), dict(wfstate='pending')]">
-  ...       <span py:choose="article['wfstate']"/>
+  ...       <span py:choose="article['wfstate']">
+  ...           <span py:when="'pending'">Pending</span>
+  ...           <span py:when="'new'">New</span>
+  ...       </span>
   ...     </div>
   ...   </body>
   ... </html>""")
   <html>
     <body>
       <div>
-        <span/>
-        <span/>
+        <span>
+            <span>New</span>
+        </span>
       </div>
+      <div>
+        <span>
+            <span>Pending</span>
+        </span>
+      </div>
     </body>
   </html>
 



More information about the Checkins mailing list