[Checkins] SVN: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/ initial implementation based on megrok.z3cform.base

Jean-Francois Roche jfroche at jfroche.be
Fri Sep 25 15:15:30 EDT 2009


Log message for revision 104548:
  initial implementation based on megrok.z3cform.base

Changed:
  U   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/buildout.cfg
  _U  five.megrok.z3cform/branches/based-on-megrok.z3cform.base/devel/
  U   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/devel/EXTERNALS.txt
  U   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/setup.py
  U   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/__init__.py
  U   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/components.py
  U   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/configure.zcml
  A   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/directive.py
  A   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/meta.py
  U   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/meta.zcml
  U   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/testing.zcml
  U   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/form/form.py
  A   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/
  A   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/__init__.py
  A   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/formwithlayout.py
  A   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/layout.pt
  U   five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/test_all.py

-=-
Modified: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/buildout.cfg
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/buildout.cfg	2009-09-25 19:08:26 UTC (rev 104547)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/buildout.cfg	2009-09-25 19:15:30 UTC (rev 104548)
@@ -6,12 +6,30 @@
     zopepy
     test
 develop = .
-          devel/megrok.z3cform
+          devel/megrok.z3cform.base
 versions = versions
 
 [versions]
 z3c.form = 1.9.0
+grokcore.annotation = 1.1
+grokcore.component = 1.7
+grokcore.formlib = 1.4
+grokcore.security = 1.2
+grokcore.site = 1.1
+grokcore.view = 1.12.2
+grokcore.viewlet = 1.3
+five.localsitemanager = 1.1
+martian = 0.11
+zope.app.publisher = 3.5.1
+zope.app.zcmlfiles = 3.4.3
+zope.component = 3.4.0
+zope.i18n = 3.4.0
+zope.interface = 3.4.1
+zope.schema = 3.4.0
+zope.securitypolicy = 3.4.1
+zope.testing = 3.7.6
 
+
 # Unpin these packages so that the fake-eggs from the zope2 system are used
 zope.configuration = 
 zope.app.container = 
@@ -73,7 +91,7 @@
 verbose-security = on
 eggs =
     zope.component>=3.4,<3.5dev
-    megrok.z3cform
+    megrok.z3cform.base
     five.megrok.z3cform
 zcml = five.megrok.z3cform:meta.zcml
        five.megrok.z3cform
@@ -89,5 +107,6 @@
 [test]
 recipe = zc.recipe.testrunner
 eggs = ${instance:eggs}
+       ipdb
 extra-paths = ${zope2:location}/lib/python
 defaults = ['-m', 'five.megrok.z3cform', '--tests-pattern', '^f?tests$', '-v']


Property changes on: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/devel
___________________________________________________________________
Modified: svn:externals
   - # svn propset svn:externals -F EXTERNALS.txt .
megrok.z3cform svn://svn.zope.org/repos/main/megrok.z3cform/trunk

   + # svn propset svn:externals -F EXTERNALS.txt .
megrok.z3cform.base svn://svn.zope.org/repos/main/megrok.z3cform.base/trunk


Modified: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/devel/EXTERNALS.txt
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/devel/EXTERNALS.txt	2009-09-25 19:08:26 UTC (rev 104547)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/devel/EXTERNALS.txt	2009-09-25 19:15:30 UTC (rev 104548)
@@ -1,2 +1,2 @@
 # svn propset svn:externals -F EXTERNALS.txt .
-megrok.z3cform svn://svn.zope.org/repos/main/megrok.z3cform/trunk
+megrok.z3cform.base svn://svn.zope.org/repos/main/megrok.z3cform.base/trunk

Modified: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/setup.py
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/setup.py	2009-09-25 19:08:26 UTC (rev 104547)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/setup.py	2009-09-25 19:15:30 UTC (rev 104548)
@@ -30,7 +30,7 @@
       install_requires=[
           'setuptools',
           'five.grok',
-          'megrok.z3cform',
+          'megrok.z3cform.base',
           'plone.z3cform'
       ],
       entry_points="""

Modified: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/__init__.py
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/__init__.py	2009-09-25 19:08:26 UTC (rev 104547)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/__init__.py	2009-09-25 19:15:30 UTC (rev 104548)
@@ -1,2 +1,2 @@
-
 from components import Form, AddForm, EditForm, DisplayForm
+from directive import wrapper

Modified: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/components.py
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/components.py	2009-09-25 19:08:26 UTC (rev 104547)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/components.py	2009-09-25 19:15:30 UTC (rev 104548)
@@ -1,12 +1,12 @@
 
 import martian
-from five import grok
-from megrok.z3cform import components
+from megrok.z3cform.base import components
 from plone.z3cform import z2
 
 from z3c.form import form
 from z3c.form.interfaces import IFormLayer
 
+
 class GrokForm(components.GrokForm):
 
     def __init__(self, *args):
@@ -21,21 +21,22 @@
         z2.switch_on(self, request_layer=IFormLayer)
         return super(GrokForm, self).__call__()
 
-class Form(GrokForm, form.Form, grok.View):
 
+class Form(GrokForm, form.Form):
+
     martian.baseclass()
 
-class AddForm(GrokForm, form.AddForm, grok.View):
 
+class AddForm(GrokForm, form.AddForm):
+
     martian.baseclass()
 
 
-class EditForm(GrokForm, form.EditForm, grok.View):
+class EditForm(GrokForm, form.EditForm):
 
     martian.baseclass()
 
 
-class DisplayForm(GrokForm, form.DisplayForm, grok.View):
+class DisplayForm(GrokForm, form.DisplayForm):
 
     martian.baseclass()
-

Modified: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/configure.zcml
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/configure.zcml	2009-09-25 19:08:26 UTC (rev 104547)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/configure.zcml	2009-09-25 19:15:30 UTC (rev 104548)
@@ -2,8 +2,9 @@
     xmlns="http://namespaces.zope.org/zope"
     xmlns:browser="http://namespaces.zope.org/browser">
 
-  <include package="five.grok" />
+  <include package="z3c.form" file="meta.zcml"/>
+  <include package="z3c.form" />
   <include package="plone.z3cform" />
-  <include package="megrok.z3cform" />
+  <include package="megrok.z3cform.base" />
 
 </configure>

Added: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/directive.py
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/directive.py	                        (rev 0)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/directive.py	2009-09-25 19:15:30 UTC (rev 104548)
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+import martian
+
+
+class wrapper(martian.Directive):
+    scope = martian.CLASS
+    store = martian.ONCE
+    validate = martian.validateClass

Added: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/meta.py
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/meta.py	                        (rev 0)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/meta.py	2009-09-25 19:15:30 UTC (rev 104548)
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+from five.grok.meta import ViewSecurityGrokker
+from megrok.z3cform.base.components import GrokForm
+import martian
+import grokcore.security
+from plone.z3cform.layout import wrap_form, FormWrapper
+from grokcore.view.meta.views import ViewGrokker, default_view_name
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+from five.megrok.z3cform.directive import wrapper
+
+
+class FiveGrokFormGrokker(ViewSecurityGrokker, ViewGrokker):
+    martian.component(GrokForm)
+    martian.priority(200)
+    martian.directive(grokcore.component.context)
+    martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
+    martian.directive(grokcore.component.name, get_default=default_view_name)
+    martian.directive(grokcore.security.require, name='permission')
+    martian.directive(wrapper, default=FormWrapper, name='formwrapper')
+
+    def execute(self, factory, config, context, layer, name, permission,
+                formwrapper, **kw):
+        if getattr(factory, 'wrap', False):
+            factory.__view_name__ = name
+            newfactory = wrap_form(factory, formwrapper)
+            newfactory.module_info = factory.module_info
+            factory = newfactory
+            factory.render = factory.__call__
+
+        ViewSecurityGrokker.execute(self, factory, config, permission, **kw)
+        ViewGrokker.execute(self, factory, config, context, layer, name, **kw)
+        return True

Modified: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/meta.zcml
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/meta.zcml	2009-09-25 19:08:26 UTC (rev 104547)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/meta.zcml	2009-09-25 19:15:30 UTC (rev 104548)
@@ -1,8 +1,10 @@
 <configure
     xmlns="http://namespaces.zope.org/zope"
+    xmlns:grok="http://namespaces.zope.org/grok"
     xmlns:browser="http://namespaces.zope.org/browser">
 
   <include package="five.grok" file="meta.zcml" />
-  <include package="megrok.z3cform" file="meta.zcml" />
+  <include package="megrok.z3cform.base" file="meta.zcml" />
+  <grok:grok package=".meta" />
 
 </configure>

Modified: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/testing.zcml
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/testing.zcml	2009-09-25 19:08:26 UTC (rev 104547)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/testing.zcml	2009-09-25 19:15:30 UTC (rev 104548)
@@ -2,7 +2,7 @@
     xmlns="http://namespaces.zope.org/zope"
     xmlns:browser="http://namespaces.zope.org/browser">
 
+  <include package="five.grok" />
   <include package="five.megrok.z3cform" file="meta.zcml" />
   <include package="five.megrok.z3cform" />
-
 </configure>

Modified: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/form/form.py
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/form/form.py	2009-09-25 19:08:26 UTC (rev 104547)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/form/form.py	2009-09-25 19:15:30 UTC (rev 104548)
@@ -1,26 +1,83 @@
 """
 
   >>> grok.testing.grok(__name__)
+  >>> from zope.publisher.browser import TestRequest
+  >>> from zope.interface import alsoProvides
+  >>> from zope.annotation.interfaces import IAttributeAnnotatable
+  >>> from z3c.form.interfaces import IFormLayer
+  >>> def make_request(form={}):
+  ...     request = TestRequest()
+  ...     request.form.update(form)
+  ...     alsoProvides(request, IFormLayer)
+  ...     alsoProvides(request, IAttributeAnnotatable)
+  ...     return request
 
+  >>> request = make_request()
+  >>> from zope.component import getMultiAdapter
+  >>> manfred = Mammoth('manfred')
+  >>> edit = getMultiAdapter((manfred, request), name='edit')
+  >>> print edit()
+  <form action="http://127.0.0.1" method="post"
+     enctype="multipart/form-data">
+            <div class="row">
+                <div class="field">
+                  <label for="form-widgets-name">
+                    <span>Name</span>
+                  </label>
+                  <span class="fieldRequired"
+                        title="Required">
+                    (Required)
+                  </span>
+                  <div class="widget">
+                    <input type="text" id="form-widgets-name"
+     name="form.widgets.name"
+     class="text-widget required textline-field" value="" />
+                  </div>
+                </div>
+            </div>
+            <div class="row">
+                <div class="field">
+                  <label for="form-widgets-age">
+                    <span>Age</span>
+                  </label>
+                  <span class="fieldRequired"
+                        title="Required">
+                    (Required)
+                  </span>
+                  <div class="widget">
+                    <input type="text" id="form-widgets-age"
+     name="form.widgets.age"
+     class="text-widget required int-field" value="" />
+                  </div>
+                </div>
+            </div>
+          <div class="action">
+            <input type="submit" id="form-buttons-apply"
+     name="form.buttons.apply"
+     class="submit-widget button-field" value="Apply" />
+          </div>
+  </form>
 """
 
 from five import grok
 from five.megrok import z3cform
 from zope import interface, schema
+from z3c.form import field
 from zope.schema.fieldproperty import FieldProperty
 
+
 class IMammoth(interface.Interface):
-    
     name = schema.TextLine(title=u"Name")
     age = schema.Int(title=u"Age")
 
+
 class Mammoth(grok.Model):
-    
     grok.implements(IMammoth)
 
     name = FieldProperty(IMammoth['name'])
     age = FieldProperty(IMammoth['age'])
 
+
 class Edit(z3cform.EditForm):
-
+    fields = field.Fields(IMammoth)
     grok.context(IMammoth)

Added: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/__init__.py
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/__init__.py	                        (rev 0)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/__init__.py	2009-09-25 19:15:30 UTC (rev 104548)
@@ -0,0 +1 @@
+

Added: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/formwithlayout.py
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/formwithlayout.py	                        (rev 0)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/formwithlayout.py	2009-09-25 19:15:30 UTC (rev 104548)
@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+"""
+
+  >>> grok.testing.grok(__name__)
+  >>> from zope.publisher.browser import TestRequest
+  >>> from zope.interface import alsoProvides
+  >>> from zope.annotation.interfaces import IAttributeAnnotatable
+  >>> from z3c.form.interfaces import IFormLayer
+  >>> def make_request(form={}):
+  ...     request = TestRequest()
+  ...     request.form.update(form)
+  ...     alsoProvides(request, IFormLayer)
+  ...     alsoProvides(request, IAttributeAnnotatable)
+  ...     return request
+
+  >>> request = make_request()
+  >>> from zope.component import getMultiAdapter
+  >>> manfred = Mammoth('manfred')
+  >>> edit = getMultiAdapter((manfred, request), name='edit')
+  >>> edit
+  <plone.z3cform.layout.MyFormWrapper object at ...>
+  >>> print edit()
+  <html xmlns="http://www.w3.org/1999/xhtml">
+  <body>
+    <h1></h1>
+    <div id="layout-contents">
+      <form action="http://127.0.0.1" method="post"
+         enctype="multipart/form-data">
+                <div class="row">
+                    <div class="field">
+                      <label for="form-widgets-name">
+                        <span>Name</span>
+                      </label>
+                      <span class="fieldRequired"
+                            title="Required">
+                        (Required)
+                      </span>
+                      <div class="widget">
+                        <input type="text" id="form-widgets-name"
+         name="form.widgets.name"
+         class="text-widget required textline-field" value="" />
+                      </div>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="field">
+                      <label for="form-widgets-age">
+                        <span>Age</span>
+                      </label>
+                      <span class="fieldRequired"
+                            title="Required">
+                        (Required)
+                      </span>
+                      <div class="widget">
+                        <input type="text" id="form-widgets-age"
+         name="form.widgets.age"
+         class="text-widget required int-field" value="" />
+                      </div>
+                    </div>
+                </div>
+              <div class="action">
+                <input type="submit" id="form-buttons-apply"
+         name="form.buttons.apply"
+         class="submit-widget button-field" value="Apply" />
+              </div>
+      </form>
+    </div>
+  </body>
+  </html>
+"""
+import os
+from five import grok
+from five.megrok import z3cform
+from plone.z3cform.layout import FormWrapper
+from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+from z3c.form import field
+from zope import interface, schema
+from zope.schema.fieldproperty import FieldProperty
+import five.megrok.z3cform.tests.formwithlayout
+from zope.interface import implements
+from plone.z3cform.interfaces import IFormWrapper
+path = lambda p: os.path.join(os.path.dirname(five.megrok.z3cform.tests.formwithlayout.__file__), p)
+
+
+class IMammoth(interface.Interface):
+    name = schema.TextLine(title=u"Name")
+    age = schema.Int(title=u"Age")
+
+
+class Mammoth(grok.Model):
+    grok.implements(IMammoth)
+
+    name = FieldProperty(IMammoth['name'])
+    age = FieldProperty(IMammoth['age'])
+
+
+class IMammothFormWrapper(IFormWrapper):
+    """
+    Form Wrapper for Mammoth
+    """
+
+
+class MyCoolFormWrapper(FormWrapper):
+    implements(IMammothFormWrapper)
+    index = ViewPageTemplateFile(path('layout.pt'), _prefix='')
+
+
+class Edit(z3cform.EditForm):
+    fields = field.Fields(IMammoth)
+    grok.context(IMammoth)
+    z3cform.wrapper(MyCoolFormWrapper)
+    wrap = True

Added: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/layout.pt
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/layout.pt	                        (rev 0)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/formwithlayout/layout.pt	2009-09-25 19:15:30 UTC (rev 104548)
@@ -0,0 +1,14 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n">
+<body>
+
+  <h1 tal:content="view/label">View Title</h1>
+
+  <div id="layout-contents">
+    <span tal:replace="structure view/contents" />
+  </div>
+
+</body>
+</html>

Modified: five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/test_all.py
===================================================================
--- five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/test_all.py	2009-09-25 19:08:26 UTC (rev 104547)
+++ five.megrok.z3cform/branches/based-on-megrok.z3cform.base/src/five/megrok/z3cform/tests/test_all.py	2009-09-25 19:15:30 UTC (rev 104548)
@@ -7,7 +7,7 @@
 import Products.Five
 from Products.Five import zcml
 import five.megrok.z3cform
-import os
+from five.grok.testing import grok
 
 
 def setUp(test=None):
@@ -16,8 +16,6 @@
     zcml.load_config('configure.zcml', package=Products.Five)
     zcml.load_config('testing.zcml', package=five.megrok.z3cform)
 
-from five.grok.testing import grok
-from zope import component
 
 def suiteFromPackage(name):
     files = resource_listdir(__name__, name)
@@ -43,7 +41,7 @@
 
 def test_suite():
     suite = unittest.TestSuite()
-    for name in ['form',]:
+    for name in ['form', 'formwithlayout']:
         suite.addTest(suiteFromPackage(name))
     return suite
 



More information about the checkins mailing list