[Checkins] SVN: grokcore.view/trunk/ Factor out a TemplateGrokker.

Sylvain Viollon sylvain at infrae.com
Tue Dec 7 10:25:48 EST 2010


Log message for revision 118743:
  Factor out a TemplateGrokker.
  

Changed:
  U   grokcore.view/trunk/CHANGES.txt
  U   grokcore.view/trunk/src/grokcore/view/meta/views.py

-=-
Modified: grokcore.view/trunk/CHANGES.txt
===================================================================
--- grokcore.view/trunk/CHANGES.txt	2010-12-07 14:57:43 UTC (rev 118742)
+++ grokcore.view/trunk/CHANGES.txt	2010-12-07 15:25:48 UTC (rev 118743)
@@ -4,6 +4,9 @@
 2.2 (unreleased)
 ----------------
 
+- Factor out a base template grokker that associate templates for
+  viewish components.
+
 - Merge support for a global template registry that remove unnecessary
   warnings about unassociated templates.
 

Modified: grokcore.view/trunk/src/grokcore/view/meta/views.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/meta/views.py	2010-12-07 14:57:43 UTC (rev 118742)
+++ grokcore.view/trunk/src/grokcore/view/meta/views.py	2010-12-07 15:25:48 UTC (rev 118743)
@@ -30,6 +30,40 @@
 def default_view_name(component, module=None, **data):
     return component.__name__.lower()
 
+
+class TemplateGrokker(martian.ClassGrokker):
+    martian.baseclass()
+
+    def grok(self, name, factory, module_info, **kw):
+        # Need to store the module info to look for a template
+        factory.module_info = module_info
+        return super(TemplateGrokker, self).grok(name, factory, module_info, **kw)
+
+    def execute(self, factory, config, **kw):
+        # find templates
+        config.action(
+            discriminator=None,
+            callable=self.check_templates,
+            args=(factory.module_info, factory))
+        return True
+
+    def check_templates(self, module_info, factory):
+        templatereg.checkTemplates(
+            module_info, factory, 'view', self.has_render, self.has_no_render)
+
+    def has_render(self, factory):
+        render = getattr(factory, 'render', None)
+        base_method = getattr(render, 'base_method', False)
+        return render and not base_method
+
+    def has_no_render(self, factory):
+        return not self.has_render(factory)
+
+
+class ViewTemplateGrokker(TemplateGrokker):
+    martian.component(components.View)
+
+
 class ViewGrokker(martian.ClassGrokker):
     martian.component(components.View)
     martian.directive(grokcore.component.context)
@@ -43,13 +77,6 @@
         return super(ViewGrokker, self).grok(name, factory, module_info, **kw)
 
     def execute(self, factory, config, context, layer, name, **kw):
-        # find templates
-        config.action(
-            discriminator=None,
-            callable=self.checkTemplates,
-            args=(factory.module_info, factory)
-            )
-
         # safety belt: make sure that the programmer didn't use
         # @grok.require on any of the view's methods.
         methods = util.methods_from_class(factory)
@@ -71,20 +98,7 @@
             )
         return True
 
-    def checkTemplates(self, module_info, factory):
 
-        def has_render(factory):
-            render = getattr(factory, 'render', None)
-            base_method = getattr(render, 'base_method', False)
-            return render and not base_method
-
-        def has_no_render(factory):
-            return not has_render(factory)
-
-        templatereg.checkTemplates(
-            module_info, factory, 'view', has_render, has_no_render)
-
-
 class ViewSecurityGrokker(martian.ClassGrokker):
     martian.component(components.View)
     martian.directive(grokcore.security.require, name='permission')



More information about the checkins mailing list