[Checkins] SVN: grokcore.viewlet/trunk/ make the has_render() and has_no_render() checks in the template grokkker symmetrical to the checks in grokcore.view, grokcore.layout and grokcore.formlib

Jan Wijbrand Kolman cvs-admin at zope.org
Tue Sep 4 10:15:32 UTC 2012


Log message for revision 127682:
  make the has_render() and has_no_render() checks in the template grokkker symmetrical to the checks in grokcore.view, grokcore.layout and grokcore.formlib

Changed:
  U   grokcore.viewlet/trunk/CHANGES.txt
  U   grokcore.viewlet/trunk/src/grokcore/viewlet/components.py
  U   grokcore.viewlet/trunk/src/grokcore/viewlet/meta.py

-=-
Modified: grokcore.viewlet/trunk/CHANGES.txt
===================================================================
--- grokcore.viewlet/trunk/CHANGES.txt	2012-09-03 20:35:55 UTC (rev 127681)
+++ grokcore.viewlet/trunk/CHANGES.txt	2012-09-04 10:15:27 UTC (rev 127682)
@@ -4,9 +4,10 @@
 1.10.2 (unreleased)
 -------------------
 
-- Nothing changed yet.
+- Make the ``has_render()`` and ``has_no_render()`` symmetrical to those
+  in grokcore.view, grokcore.layout and grokcore.formlib, where a
+  ``render.base_method`` attribute is checked.
 
-
 1.10.1 (2012-05-02)
 -------------------
 

Modified: grokcore.viewlet/trunk/src/grokcore/viewlet/components.py
===================================================================
--- grokcore.viewlet/trunk/src/grokcore/viewlet/components.py	2012-09-03 20:35:55 UTC (rev 127681)
+++ grokcore.viewlet/trunk/src/grokcore/viewlet/components.py	2012-09-04 10:15:27 UTC (rev 127682)
@@ -75,6 +75,9 @@
             return self.template.render(self)
         else:
             return u'\n'.join([viewlet.render() for viewlet in self.viewlets])
+    # Mark the render() method as a method from the base class. That
+    # way we can detect whether somebody overrides render() in a subclass.
+    render.base_method = True
 
 
 class Viewlet(ViewletBase):
@@ -123,3 +126,6 @@
 
     def render(self):
         return self.template.render(self)
+    # Mark the render() method as a method from the base class. That
+    # way we can detect whether somebody overrides render() in a subclass.
+    render.base_method = True

Modified: grokcore.viewlet/trunk/src/grokcore/viewlet/meta.py
===================================================================
--- grokcore.viewlet/trunk/src/grokcore/viewlet/meta.py	2012-09-03 20:35:55 UTC (rev 127681)
+++ grokcore.viewlet/trunk/src/grokcore/viewlet/meta.py	2012-09-04 10:15:27 UTC (rev 127682)
@@ -32,7 +32,9 @@
     martian.component(grokcore.viewlet.ViewletManager)
 
     def has_render(self, factory):
-        return factory.render != components.ViewletManager.render
+        render = getattr(factory, 'render', None)
+        base_method = getattr(render, 'base_method', False)
+        return render and not base_method
 
     def has_no_render(self, factory):
         # always has a render method
@@ -68,12 +70,13 @@
     martian.component(grokcore.viewlet.Viewlet)
 
     def has_render(self, factory):
-        return factory.render != components.Viewlet.render
+        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 ViewletGrokker(martian.ClassGrokker):
     martian.component(grokcore.viewlet.Viewlet)
     martian.directive(grokcore.component.context)



More information about the checkins mailing list