[Checkins] SVN: grok/trunk/src/grok/ Rename before() to update() on grok.View and support redirects from within

Philipp von Weitershausen philikon at philikon.de
Wed Jan 10 12:29:19 EST 2007


Log message for revision 71883:
  Rename before() to update() on grok.View and support redirects from within
  update(). The template won't be called subsequently.
  

Changed:
  U   grok/trunk/src/grok/components.py
  U   grok/trunk/src/grok/ftests/view/macros.py
  U   grok/trunk/src/grok/tests/view/before.py
  A   grok/trunk/src/grok/tests/view/update_redirect.py

-=-
Modified: grok/trunk/src/grok/components.py
===================================================================
--- grok/trunk/src/grok/components.py	2007-01-10 17:09:52 UTC (rev 71882)
+++ grok/trunk/src/grok/components.py	2007-01-10 17:29:19 UTC (rev 71883)
@@ -137,7 +137,11 @@
                 interface.Interface, name=self.module_info.package_dotted_name)
 
     def __call__(self):
-        self.before()
+        self.update()
+        if self.request.response.getStatus() in (302, 303):
+            # Somewhere in update(), a redirect was triggered.  Don't
+            # continue rendering the template or doing anything else.
+            return
 
         template = getattr(self, 'template', None)
         if not template:
@@ -183,7 +187,7 @@
     def redirect(self, url):
         return self.request.response.redirect(url)
 
-    def before(self):
+    def update(self):
         pass
 
 

Modified: grok/trunk/src/grok/ftests/view/macros.py
===================================================================
--- grok/trunk/src/grok/ftests/view/macros.py	2007-01-10 17:09:52 UTC (rev 71882)
+++ grok/trunk/src/grok/ftests/view/macros.py	2007-01-10 17:29:19 UTC (rev 71883)
@@ -46,7 +46,7 @@
 
 class Grilled(grok.View):
 
-    def before(self):
+    def update(self):
         self.spices = "Pepper and salt"
 
 painting = grok.PageTemplate("""\

Modified: grok/trunk/src/grok/tests/view/before.py
===================================================================
--- grok/trunk/src/grok/tests/view/before.py	2007-01-10 17:09:52 UTC (rev 71882)
+++ grok/trunk/src/grok/tests/view/before.py	2007-01-10 17:29:19 UTC (rev 71883)
@@ -1,5 +1,5 @@
 """
-Before a view is rendered, the before() method is executed. It can be
+Before a view is rendered, the update() method is executed. It can be
 used e. g. to execute side effects or set up data for use in the
 template.
 
@@ -32,7 +32,7 @@
     pass
 
 class CavePainting(grok.View):
-    def before(self):
+    def update(self):
         self.color = "red"
 
 

Added: grok/trunk/src/grok/tests/view/update_redirect.py
===================================================================
--- grok/trunk/src/grok/tests/view/update_redirect.py	2007-01-10 17:09:52 UTC (rev 71882)
+++ grok/trunk/src/grok/tests/view/update_redirect.py	2007-01-10 17:29:19 UTC (rev 71883)
@@ -0,0 +1,36 @@
+"""
+When a view's update() method redirects somewhere else, the template
+is not executed subsequently.
+
+  >>> grok.grok(__name__)
+
+  >>> manfred = Mammoth()
+  >>> from zope.publisher.browser import TestRequest
+  >>> request = TestRequest()
+  >>> from zope.component import getMultiAdapter
+  >>> view = getMultiAdapter((manfred, request), name='cavepainting')
+  >>> print view()
+  None
+  >>> print request.response.getStatus()
+  302
+  >>> print request.response.getHeader('Location')
+  somewhere-else
+
+"""
+import grok
+
+class Mammoth(grok.Model):
+    pass
+
+class CavePainting(grok.View):
+    def update(self):
+        self.request.response.redirect('somewhere-else')
+
+
+cavepainting = grok.PageTemplate("""\
+<html>
+<body>
+<h1 tal:content="this-is-an-error" />
+</body>
+</html>
+""")


Property changes on: grok/trunk/src/grok/tests/view/update_redirect.py
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list