[Checkins] SVN: grok/trunk/src/grok/ moved layout aware form view components from grokcore.layout to grok

Jan Wijbrand Kolman cvs-admin at zope.org
Tue May 1 18:29:04 UTC 2012


Log message for revision 125540:
  moved layout aware form view components from grokcore.layout to grok

Changed:
  U   grok/trunk/src/grok/components.py
  A   grok/trunk/src/grok/ftests/forms/
  D   grok/trunk/src/grok/ftests/forms/errorviews.py
  U   grok/trunk/src/grok/ftests/forms/forms.py
  D   grok/trunk/src/grok/ftests/forms/page.py
  U   grok/trunk/src/grok/ftests/test_grok_functional.py
  A   grok/trunk/src/grok/templates/

-=-
Modified: grok/trunk/src/grok/components.py
===================================================================
--- grok/trunk/src/grok/components.py	2012-05-01 18:22:32 UTC (rev 125539)
+++ grok/trunk/src/grok/components.py	2012-05-01 18:29:01 UTC (rev 125540)
@@ -19,10 +19,11 @@
 
 """
 import simplejson
-
+import os.path
 import zope.location
+import zope.errorview.browser
+import zope.component
 from zope.container.interfaces import IReadContainer
-import zope.errorview.browser
 from zope import component
 from zope import interface
 from zope.interface.common.interfaces import IException
@@ -42,6 +43,7 @@
 import grokcore.site
 import grokcore.message
 import grokcore.layout
+import grokcore.layout.components
 from grok import interfaces, util
 
 # BBB this is for import backward compatibility.
@@ -272,22 +274,80 @@
 class Layout(ViewSupportMixin, grokcore.layout.Layout):
     grok.baseclass()
 
-
 class Page(ViewSupportMixin, grokcore.layout.Page):
     grok.baseclass()
 
+# Default forms for form without the html and body tags
+default_form_template = grokcore.view.PageTemplateFile(
+    os.path.join('templates', 'default_edit_form.pt'))
 
-class FormPage(ViewSupportMixin, grokcore.layout.FormPage):
+default_form_template.__grok_name__ = 'default_edit_form'
+
+default_display_template = grokcore.view.PageTemplateFile(
+    os.path.join('templates', 'default_display_form.pt'))
+
+default_display_template.__grok_name__ = 'default_display_form'
+
+class LayoutAwareFormPage(grokcore.layout.components.LayoutAware):
+    """A mixin to make form aware of layouts.
+    """
+    def __call__(self):
+        """Calls update and returns the layout template which calls render.
+        """
+        mapply(self.update, (), self.request)
+        if self.request.response.getStatus() in (302, 303):
+            # A redirect was triggered somewhere in update().  Don't
+            # continue rendering the template or doing anything else.
+            return
+        # update_form() is what make a layout-aware form different from
+        # 'regular" layout-aware component.
+        self.update_form()
+        if self.request.response.getStatus() in (302, 303):
+            return
+        self.layout = zope.component.getMultiAdapter(
+            (self.request, self.context), grokcore.layout.ILayout)
+        return self.layout(self)
+
+
+class FormPage(
+    ViewSupportMixin,
+    LayoutAwareFormPage,
+    grokcore.formlib.Form
+    ):
+    """A form base class.
+    """
     grok.baseclass()
+    template = default_form_template
 
 
-class AddFormPage(ViewSupportMixin, grokcore.layout.AddFormPage):
+class AddFormPage(
+    ViewSupportMixin,
+    LayoutAwareFormPage,
+    grokcore.formlib.AddForm
+    ):
+    """Base add form.
+    """
     grok.baseclass()
+    template = default_form_template
 
 
-class EditFormPage(ViewSupportMixin, grokcore.layout.EditFormPage):
+class EditFormPage(
+    ViewSupportMixin,
+    LayoutAwareFormPage,
+    grokcore.formlib.EditForm
+    ):
+    """Base edit form.
+    """
     grok.baseclass()
+    template = default_form_template
 
 
-class DisplayFormPage(ViewSupportMixin, grokcore.layout.DisplayFormPage):
+class DisplayFormPage(
+    ViewSupportMixin,
+    LayoutAwareFormPage,
+    grokcore.formlib.DisplayForm
+    ):
+    """Base display form.
+    """
     grok.baseclass()
+    template = default_display_template

Deleted: grok/trunk/src/grok/ftests/forms/errorviews.py
===================================================================
--- grokcore.layout/trunk/src/grokcore/layout/tests/models/errorviews.py	2012-05-01 07:35:51 UTC (rev 125449)
+++ grok/trunk/src/grok/ftests/forms/errorviews.py	2012-05-01 18:29:01 UTC (rev 125540)
@@ -1,60 +0,0 @@
-"""
-    >>> from zope.component import getMultiAdapter
-    >>> from zope.publisher.browser import TestRequest
-    >>> view = getMultiAdapter((Exception(), TestRequest()), name='index')
-    >>> import grokcore.layout
-    >>> isinstance(view, grokcore.layout.ExceptionPage)
-    True
-    >>> print view.render()
-    A system error occurred.
-    >>> print view()
-    <html>
-    <body>
-    <div class="layout">A system error occurred.</div>
-    </body>
-    </html>
-
-    >>> from zope.security.interfaces import Unauthorized
-    >>> class MockPrincipal(object):
-    ...     id = 'mock principal'
-    >>> request = TestRequest()
-    >>> request.setPrincipal(MockPrincipal())
-    >>> errorpage = getMultiAdapter((Unauthorized(), request), name='index')
-    >>> print errorpage()
-    <html>
-    <body>
-    <div class="layout">Access to the requested resource is forbidden.</div>
-    </body>
-    </html>
-
-    >>> from zope.publisher.interfaces import NotFound
-    >>> request = TestRequest()
-    >>> errorpage = getMultiAdapter(
-    ...     (NotFound(None, request), request), name='index')
-    >>> print errorpage()
-    <html>
-    <body>
-    <div class="layout">The requested resource can not be found.</div>
-    </body>
-    </html>
-
-"""
-import grokcore.component as grok
-
-from grokcore.view import templatedir
-from grokcore.layout import Layout, ExceptionPage, NotFoundPage, UnauthorizedPage
-
-templatedir('templates')
-
-class Master(Layout):
-    grok.name('master')
-    grok.context(Exception)
-
-class MyExceptionPage(ExceptionPage):
-    grok.name('index')
-
-class MyUnauthorizedPage(UnauthorizedPage):
-    grok.name('index')
-
-class MyNotFoundPage(NotFoundPage):
-    grok.name('index')

Modified: grok/trunk/src/grok/ftests/forms/forms.py
===================================================================
--- grokcore.layout/trunk/src/grokcore/layout/tests/models/forms.py	2012-05-01 07:35:51 UTC (rev 125449)
+++ grok/trunk/src/grok/ftests/forms/forms.py	2012-05-01 18:29:01 UTC (rev 125540)
@@ -69,9 +69,9 @@
   </html>
 
   >>> myview
-  <grokcore.layout.tests.models.forms.MyView object at ...>
+  <grok.ftests.forms.forms.MyView object at ...>
   >>> myview.layout
-  <grokcore.layout.tests.models.forms.Master object at ...>
+  <grok.ftests.forms.forms.Master object at ...>
   >>> print myview.content()
    <table class="listing">
     <thead>
@@ -144,9 +144,9 @@
   <BLANKLINE>
 
   >>> myeditview
-  <grokcore.layout.tests.models.forms.MyEditView object at ...>
+  <grok.ftests.forms.forms.MyEditView object at ...>
   >>> myeditview.layout
-  <grokcore.layout.tests.models.forms.Master object at ...>
+  <grok.ftests.forms.forms.Master object at ...>
   >>> print myeditview.content()
   <form action="http://127.0.0.1" method="post"
         class="edit-form" enctype="multipart/form-data">
@@ -160,7 +160,7 @@
 import grokcore.component as grok
 
 from grokcore.view import templatedir
-from grokcore.layout import Layout, DisplayFormPage, EditFormPage, FormPage
+from grok import Layout, DisplayFormPage, EditFormPage, FormPage
 from zope import interface, schema
 
 

Deleted: grok/trunk/src/grok/ftests/forms/page.py
===================================================================
--- grokcore.layout/trunk/src/grokcore/layout/tests/models/page.py	2012-05-01 07:35:51 UTC (rev 125449)
+++ grok/trunk/src/grok/ftests/forms/page.py	2012-05-01 18:29:01 UTC (rev 125540)
@@ -1,46 +0,0 @@
-"""
-  >>> from grokcore.layout import ILayout
-  >>> from zope.component import getMultiAdapter
-  >>> from zope.publisher.browser import TestRequest
-  >>> request = TestRequest()
-  >>> cow = Cow()
-  >>> mylayout = getMultiAdapter((request, cow), ILayout)
-  >>> myview = getMultiAdapter((cow, request), name='myview')
-
-  >>> print myview()
-  <html>
-   <body>
-     <div class="layout"><p> My nice Content </p></div>
-   </body>
-  </html>
-
-  >>> myview
-  <grokcore.layout.tests.models.page.MyView object at ...>
-  >>> myview.layout
-  <grokcore.layout.tests.models.page.Master object at ...>
-  >>> print myview.content()
-  <p> My nice Content </p>
-
-"""
-import grokcore.component as grok
-from grokcore.view import templatedir
-from grokcore.layout import Layout, Page
-from zope import interface
-
-templatedir('templates')
-
-
-class Cow(grok.Context):
-    pass
-
-
-class Master(Layout):
-    grok.name('master')
-    grok.context(Cow)
-
-
-class MyView(Page):
-    grok.context(interface.Interface)
-
-    def render(self):
-        return "<p> My nice Content </p>"

Modified: grok/trunk/src/grok/ftests/test_grok_functional.py
===================================================================
--- grok/trunk/src/grok/ftests/test_grok_functional.py	2012-05-01 18:22:32 UTC (rev 125539)
+++ grok/trunk/src/grok/ftests/test_grok_functional.py	2012-05-01 18:29:01 UTC (rev 125540)
@@ -64,6 +64,7 @@
         'chameleon',
         'errorviews',
         'form',
+        'forms',
         'lifecycle',
         'security',
         'site',



More information about the checkins mailing list