[Checkins] SVN: grokcore.view/trunk/src/grokcore/view/ Fix the template = case, and add a test.

Sylvain Viollon sylvain at infrae.com
Tue Sep 15 13:18:33 EDT 2009


Log message for revision 104113:
  Fix the template = case, and add a test.
  
  

Changed:
  U   grokcore.view/trunk/src/grokcore/view/meta/views.py
  U   grokcore.view/trunk/src/grokcore/view/templatereg.py
  A   grokcore.view/trunk/src/grokcore/view/tests/view/viewtemplateequal.py

-=-
Modified: grokcore.view/trunk/src/grokcore/view/meta/views.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/meta/views.py	2009-09-15 16:57:58 UTC (rev 104112)
+++ grokcore.view/trunk/src/grokcore/view/meta/views.py	2009-09-15 17:18:33 UTC (rev 104113)
@@ -82,18 +82,9 @@
 
 
     def checkTemplates(self, templates, module_info, factory):
+        templates.checkTemplates(module_info, factory, 'view')
 
-        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 getattr(factory, 'render', None)
-        templates.checkTemplates(module_info, factory, 'view',
-                                 has_render, has_no_render)
-
-
 class CodeViewGrokker(martian.ClassGrokker):
     martian.component(components.CodeView)
     martian.directive(grokcore.component.context)

Modified: grokcore.view/trunk/src/grokcore/view/templatereg.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/templatereg.py	2009-09-15 16:57:58 UTC (rev 104112)
+++ grokcore.view/trunk/src/grokcore/view/templatereg.py	2009-09-15 17:18:33 UTC (rev 104113)
@@ -90,8 +90,7 @@
                 module_info.dotted_name, ', '.join(unassociated)))
             warnings.warn(msg, UserWarning, 1)
 
-    def checkTemplates(self, module_info, factory, component_name,
-                       has_render, has_no_render):
+    def checkTemplates(self, module_info, factory, component_name):
         factory_name = factory.__name__.lower()
         template_name = grokcore.view.template.bind().get(factory)
         if template_name is None:
@@ -107,24 +106,13 @@
                                 % (component_name, factory, template_name,
                                    factory_name), factory)
         template = self.get(template_name)
-        # TODO: strip render
         if template is not None:
-            if has_render(factory):
-                # we do not accept render and template both for a view
-                # (unless it's a form, they happen to have render.
-                raise GrokError(
-                    "Multiple possible ways to render %s %r. "
-                    "It has both a 'render' method as well as "
-                    "an associated template." %
-                    (component_name, factory), factory)
             self.markAssociated(template_name)
             factory.template = template
-            template._initFactory(factory)
-        else:
-            if has_no_render(factory):
-                # we do not accept a view without any way to render it
-                raise GrokError("%s %r has no associated template." %
-                                (component_name.title(), factory), factory)
+        elif getattr(factory, 'template', None) is None:
+            raise GrokError("%s %r has no associated template." %
+                            (component_name.title(), factory), factory)
+        factory.template._initFactory(factory)
 
 class PageTemplateFileFactory(grokcore.component.GlobalUtility):
     grokcore.component.implements(ITemplateFileFactory)

Added: grokcore.view/trunk/src/grokcore/view/tests/view/viewtemplateequal.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/tests/view/viewtemplateequal.py	                        (rev 0)
+++ grokcore.view/trunk/src/grokcore/view/tests/view/viewtemplateequal.py	2009-09-15 17:18:33 UTC (rev 104113)
@@ -0,0 +1,34 @@
+"""
+
+  >>> grok.testing.grok(__name__)
+
+  >>> from zope.interface.verify import verifyObject
+  >>> from grokcore.view.interfaces import IGrokView
+
+We should find the ``cavepainting`` view for a mammoth:
+
+  >>> manfred = Mammoth()
+  >>> from zope.publisher.browser import TestRequest
+  >>> request = TestRequest()
+  >>> from zope import component
+  >>> view = component.getMultiAdapter((manfred, request), name='cavepainting')
+  >>> print view()
+  A cave painting of a mammoth
+
+  >>> view.context is manfred
+  True
+  >>> view.request is request
+  True
+  >>> verifyObject(IGrokView, view)
+  True
+
+"""
+
+import grokcore.view as grok
+
+class Mammoth(grok.Context):
+    pass
+
+class CavePainting(grok.View):
+    template = grok.PageTemplate(filename='view_templates/cavepainting.pt')
+



More information about the checkins mailing list