[Checkins] SVN: grok/branches/regebro-guido-templates/ Made the view slightly more template agnostic (still some more to do) and got useful

Lennart Regebro regebro at gmail.com
Tue Oct 2 11:24:39 EDT 2007


Log message for revision 80502:
  Made the view slightly more template agnostic (still some more to do) and got useful 
  error messages for genshi attribute errors.
  

Changed:
  U   grok/branches/regebro-guido-templates/grokwiki/src/grokwiki/page.py
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/applications.pt
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokclassview.pt
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokgrokapplicationview.pt
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokinterfaceview.pt
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokmoduleview.pt
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokpackageview.pt
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgroktextfileview.pt
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokview.pt
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/index.pt
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/inspect.pt
  U   grok/branches/regebro-guido-templates/src/grok/admin/view_templates/server.pt
  U   grok/branches/regebro-guido-templates/src/grok/components.py
  U   grok/branches/regebro-guido-templates/src/grok/ftests/admin/macros.py
  U   grok/branches/regebro-guido-templates/src/grok/meta.py
  A   grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate.py
  A   grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate_templates/
  A   grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate_templates/cavepainting.gmt
  A   grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate_templates/food.gmt

-=-
Modified: grok/branches/regebro-guido-templates/grokwiki/src/grokwiki/page.py
===================================================================
--- grok/branches/regebro-guido-templates/grokwiki/src/grokwiki/page.py	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/grokwiki/src/grokwiki/page.py	2007-10-02 15:24:38 UTC (rev 80502)
@@ -57,3 +57,6 @@
         self.context.update(text)
         self.flash('Saved.')
         self.redirect(self.url(self.context))
+
+class Food(grok.View):
+    pass

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/applications.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/applications.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/applications.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="context/@@grokadminmacros/gaia-page">
+<html metal:use-macro="context/@@grokadminmacros/macros/gaia-page">
   <div metal:fill-slot="content">
 
     <form tal:define="apps context/values"

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokclassview.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokclassview.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokclassview.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="view/app_root/@@grokadminmacros/gaia-page">
+<html metal:use-macro="view/app_root/@@grokadminmacros/macros/gaia-page">
   <head>
     <title>DocGrok page title</title>
   </head>

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokgrokapplicationview.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokgrokapplicationview.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokgrokapplicationview.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="view/app_root/@@grokadminmacros/gaia-page">
+<html metal:use-macro="view/app_root/@@grokadminmacros/macros/gaia-page">
   <head>
     <title>DocGrok page title</title>
   </head>

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokinterfaceview.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokinterfaceview.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokinterfaceview.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="view/app_root/@@grokadminmacros/gaia-page">
+<html metal:use-macro="view/app_root/@@grokadminmacros/macros/gaia-page">
   <head>
     <title>DocGrok page title</title>
   </head>

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokmoduleview.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokmoduleview.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokmoduleview.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="view/app_root/@@grokadminmacros/gaia-page">
+<html metal:use-macro="view/app_root/@@grokadminmacros/macros/gaia-page">
   <head>
     <title>DocGrok page title</title>
   </head>

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokpackageview.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokpackageview.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokpackageview.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="view/app_root/@@grokadminmacros/gaia-page">
+<html metal:use-macro="view/app_root/@@grokadminmacros/macros/gaia-page">
   <head>
     <title>DocGrokPackage page title</title>
   </head>

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgroktextfileview.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgroktextfileview.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgroktextfileview.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="view/app_root/@@grokadminmacros/gaia-page">
+<html metal:use-macro="view/app_root/@@grokadminmacros/macros/gaia-page">
   <head>
     <title>DocGrok page title</title>
   </head>

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokview.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokview.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/docgrokview.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="view/app_root/@@grokadminmacros/gaia-page">
+<html metal:use-macro="view/app_root/@@grokadminmacros/macros/gaia-page">
   <head>
     <title>DocGrok page title</title>
   </head>

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/index.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/index.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/index.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="context/@@grokadminmacros/gaia-page">
+<html metal:use-macro="context/@@grokadminmacros/macros/gaia-page">
   <div metal:fill-slot="content">
     <h1></h1>
     <div class="logo">

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/inspect.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/inspect.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/inspect.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="context/@@grokadminmacros/gaia-page">
+<html metal:use-macro="context/@@grokadminmacros/macros/gaia-page">
   <div metal:fill-slot="content">
     <h1>
       <span tal:content="view/info/name" />

Modified: grok/branches/regebro-guido-templates/src/grok/admin/view_templates/server.pt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/admin/view_templates/server.pt	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/admin/view_templates/server.pt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -1,4 +1,4 @@
-<html metal:use-macro="context/@@grokadminmacros/gaia-page">
+<html metal:use-macro="context/@@grokadminmacros/macros/gaia-page">
   <div metal:fill-slot="content">
     <h1>Manage your Zope 3 instance</h1>
 

Modified: grok/branches/regebro-guido-templates/src/grok/components.py
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/components.py	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/components.py	2007-10-02 15:24:38 UTC (rev 80502)
@@ -20,6 +20,7 @@
 import warnings
 import pytz
 import simplejson
+import genshi.template
 
 from zope import component
 from zope import interface
@@ -131,9 +132,16 @@
         return self.template.pt_render(namespace)
 
     def __getitem__(self, key):
-        # XXX give nice error message if template is None
+        if getattr(self.template, 'macros', None) is None:
+            raise AttributeError("View has no item %s" % key)
+        # When this deprecation is done with, this whole __getitem__ can 
+        # be removed.
+        warnings.warn("Calling macros directly on the view is deprecated. "
+                      "Please use view/@@viewname/macros/macroname\n"
+                      "View %r, macro %s" % (self, key),
+                      DeprecationWarning)
         return self.template.macros[key]
-
+    
     def url(self, obj=None, name=None):
         # if the first argument is a string, that's the name. There should
         # be no second argument
@@ -216,6 +224,8 @@
         # PageTemplate cannot be subclassed
         self.__grok_module__ = martian.util.caller_module()
 
+    def _factory_init(self, factory):
+        factory.macros = self.macros
 
 class PageTemplateFile(GrokPageTemplate, TrustedAppPT,
                        pagetemplatefile.PageTemplateFile):
@@ -232,9 +242,9 @@
         # PageTemplateFile cannot be subclassed
         self.__grok_module__ = martian.util.caller_module()
     
+    def _factory_init(self, factory):
+        factory.macros = self.macros
 
-import genshi.template
-
 class GenshiMarkupTemplate(GrokPageTemplate):
 
     interface.implements(interfaces.ITemplateFile)
@@ -255,6 +265,9 @@
         stream = self._template.generate(**namespace)
         return stream.render('xhtml')
     
+    def _factory_init(self, factory):
+        pass
+    
     # XXX Ugly temporary ZPT emulation
     def pt_getContext(self):
         return {}

Modified: grok/branches/regebro-guido-templates/src/grok/ftests/admin/macros.py
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/ftests/admin/macros.py	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/ftests/admin/macros.py	2007-10-02 15:24:38 UTC (rev 80502)
@@ -62,7 +62,7 @@
     grok.context(Mammoth)
 
 externalview = grok.PageTemplate("""\
-<html metal:use-macro="context/@@grokadminmacros/gaia-page">
+<html metal:use-macro="context/@@grokadminmacros/macros/gaia-page">
 </html>
 """)
 

Modified: grok/branches/regebro-guido-templates/src/grok/meta.py
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/meta.py	2007-10-02 14:55:28 UTC (rev 80501)
+++ grok/branches/regebro-guido-templates/src/grok/meta.py	2007-10-02 15:24:38 UTC (rev 80502)
@@ -169,6 +169,7 @@
 
             templates.markAssociated(template_name)
             factory.template = template
+            template._factory_init(factory)
         else:
             if not getattr(factory, 'render', None):
                 # we do not accept a view without any way to render it
@@ -202,7 +203,10 @@
                                 % (method.__name__, factory), factory)
         return True
 
+def view__getitem__(self, key):
+    return self.template.macros[key]
 
+
 class JSONGrokker(martian.ClassGrokker):
     component_class = grok.JSON
 

Added: grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate.py
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate.py	                        (rev 0)
+++ grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate.py	2007-10-02 15:24:38 UTC (rev 80502)
@@ -0,0 +1,38 @@
+"""
+Templates can also be found in a directory with the same name as the module:
+
+  >>> grok.grok(__name__)
+  
+  >>> manfred = Mammoth()
+  >>> from zope.publisher.browser import TestRequest
+  >>> request = TestRequest()
+  >>> from zope import component
+  >>> view = component.getMultiAdapter((manfred, request), name='cavepainting')
+  >>> print view()
+  <html>
+  <body>
+  A cave painting.
+  </body>
+  </html>
+
+  >>> view = component.getMultiAdapter((manfred, request), name='food')
+  >>> print view()
+  <html>
+  <body>
+  ME GROK EAT MAMMOTH!
+  </body>
+  </html>
+
+"""
+import grok
+
+class Mammoth(grok.Model):
+    pass
+
+class CavePainting(grok.View):
+    pass
+
+class Food(grok.View):
+    
+    def me_do(self):
+        return "ME GROK EAT MAMMOTH!"


Property changes on: grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate_templates/cavepainting.gmt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate_templates/cavepainting.gmt	                        (rev 0)
+++ grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate_templates/cavepainting.gmt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -0,0 +1,5 @@
+<html>
+<body>
+A cave painting.
+</body>
+</html>

Added: grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate_templates/food.gmt
===================================================================
--- grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate_templates/food.gmt	                        (rev 0)
+++ grok/branches/regebro-guido-templates/src/grok/tests/view/genshitemplate_templates/food.gmt	2007-10-02 15:24:38 UTC (rev 80502)
@@ -0,0 +1,5 @@
+<html>
+<body>
+${view.me_do()}
+</body>
+</html>



More information about the Checkins mailing list