[Checkins] SVN: grokcore.view/trunk/ Page template reloading now also works for macros. Fixes

Reinout van Rees reinout at vanrees.org
Wed Apr 8 05:12:30 EDT 2009


Log message for revision 99003:
  Page template reloading now also works for macros. Fixes
  https://bugs.launchpad.net/grok/+bug/162261.
  

Changed:
  U   grokcore.view/trunk/CHANGES.txt
  U   grokcore.view/trunk/src/grokcore/view/components.py
  U   grokcore.view/trunk/src/grokcore/view/ftests/view/macros.py
  A   grokcore.view/trunk/src/grokcore/view/ftests/view/macros_templates/
  A   grokcore.view/trunk/src/grokcore/view/ftests/view/macros_templates/layout.pt

-=-
Modified: grokcore.view/trunk/CHANGES.txt
===================================================================
--- grokcore.view/trunk/CHANGES.txt	2009-04-08 08:08:00 UTC (rev 99002)
+++ grokcore.view/trunk/CHANGES.txt	2009-04-08 09:12:30 UTC (rev 99003)
@@ -4,6 +4,9 @@
 1.4 (unreleased)
 ----------------
 
+* Page template reloading now also works for macros. Fixes
+  https://bugs.launchpad.net/grok/+bug/162261.
+
 * Use zope.container instead of zope.app.container.
 
 * Ignore '<tpl>.cache' files when looking up template files in a

Modified: grokcore.view/trunk/src/grokcore/view/components.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/components.py	2009-04-08 08:08:00 UTC (rev 99002)
+++ grokcore.view/trunk/src/grokcore/view/components.py	2009-04-08 09:12:30 UTC (rev 99003)
@@ -210,7 +210,12 @@
         self._template = TrustedFilePageTemplate(filename, _prefix)
 
     def _initFactory(self, factory):
-        factory.macros = self._template.macros
+        def _get_macros(self):
+            return self.template._template.macros
+        # _template.macros is a property that does template reloading in debug
+        # mode.  A direct "factory.macros = macros" basically caches the
+        # template.  So we use a property.
+        factory.macros = property(_get_macros)
 
     def render(self, view):
         namespace = self.getNamespace(view)

Modified: grokcore.view/trunk/src/grokcore/view/ftests/view/macros.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/ftests/view/macros.py	2009-04-08 08:08:00 UTC (rev 99002)
+++ grokcore.view/trunk/src/grokcore/view/ftests/view/macros.py	2009-04-08 09:12:30 UTC (rev 99003)
@@ -44,6 +44,34 @@
 
   >>> warnings.warn = saved_warn
 
+Filesystem-based templates, once grokked, can be changed.  The change will
+automatically be picked up, reloading Zope is not necessary.  (Generic reload
+tests are in ``grokcore/view/tests/view/templatereload.py``) Reload also
+applies to macros::
+
+  >>> import os.path
+  >>> here = os.path.dirname(__file__)
+  >>> template_file = os.path.join(here, 'macros_templates', 'layout.pt')
+  >>> before = open(template_file, 'r').read()
+  >>> changed = before.replace('GROK', 'GROK RELOADED')
+  >>> open(template_file, 'w').write(changed)
+  >>> browser.open("http://localhost/manfred/@@painting")
+  >>> print browser.contents
+  <html>
+  <body>
+  <h1>GROK RELOADED MACRO!</h1>
+  <div>
+  GROK SLOT!
+  </div>
+  </body>
+  </html>
+
+Restore situation::
+
+  >>> open(template_file, 'w').write(before)
+
+
+
 """
 import grokcore.view as grok
 
@@ -72,17 +100,10 @@
 """)
 
 class Layout(grok.View):
+    # Layout template is in macros_templates/layout.pt for reload test
+    # purposes.
     pass
 
-layout = grok.PageTemplate("""\
-<html metal:define-macro="main">
-<body>
-<h1>GROK MACRO!</h1>
-<div metal:define-slot="slot">
-</div>
-</body>
-</html>""")
-
 class Dancing(grok.View):
     pass
 

Added: grokcore.view/trunk/src/grokcore/view/ftests/view/macros_templates/layout.pt
===================================================================
--- grokcore.view/trunk/src/grokcore/view/ftests/view/macros_templates/layout.pt	                        (rev 0)
+++ grokcore.view/trunk/src/grokcore/view/ftests/view/macros_templates/layout.pt	2009-04-08 09:12:30 UTC (rev 99003)
@@ -0,0 +1,7 @@
+<html metal:define-macro="main">
+<body>
+<h1>GROK MACRO!</h1>
+<div metal:define-slot="slot">
+</div>
+</body>
+</html>
\ No newline at end of file


Property changes on: grokcore.view/trunk/src/grokcore/view/ftests/view/macros_templates/layout.pt
___________________________________________________________________
Added: svn:eol-style
   + native



More information about the Checkins mailing list