[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