[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