[Checkins] SVN: z3ext.layoutform/tags/1.3.0/ release tag

Nikolay Kim fafhrd at datacom.kz
Mon Dec 22 12:57:40 EST 2008


Log message for revision 94249:
  release tag

Changed:
  A   z3ext.layoutform/tags/1.3.0/
  D   z3ext.layoutform/tags/1.3.0/CHANGES.txt
  A   z3ext.layoutform/tags/1.3.0/CHANGES.txt
  D   z3ext.layoutform/tags/1.3.0/buildout.cfg
  A   z3ext.layoutform/tags/1.3.0/buildout.cfg
  D   z3ext.layoutform/tags/1.3.0/setup.py
  A   z3ext.layoutform/tags/1.3.0/setup.py
  D   z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py
  A   z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py
  A   z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/form.txt
  D   z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml
  A   z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml
  D   z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py
  A   z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py

-=-
Deleted: z3ext.layoutform/tags/1.3.0/CHANGES.txt
===================================================================
--- z3ext.layoutform/trunk/CHANGES.txt	2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/CHANGES.txt	2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,126 +0,0 @@
-=======
-CHANGES
-=======
-
-1.3.0 (Unreleased)
-------------------
-
-- Added subforms based on new z3ext.layout pagelet api
-
-- Fixed 'formError' status message
-
-- Use button.handler instead of buttonAndHandler
-
-- Use new pagelet api for rendering widgets
-
-
-1.2.8 (2008-11-21)
-------------------
-
-- Fixed 'formError' status message
-
-
-1.2.7 (2008-11-20)
-------------------
-
-- Use new z3ext.statusmessage api
-
-
-1.2.6 (2008-11-06)
-------------------
-
-- Use updated pagelet api for nameless pagelets
-
-
-1.2.5 (2008-10-22)
-------------------
-
-- Update translations
-
-
-1.2.4 (2008-10-20)
-------------------
-
-- Added support of display form
-
-- Added tranlsations: nl, ru
-
-
-1.2.3 (2008-10-14)
-------------------
-
-- Groups support restored
-
-- Use IPageletType for views
-
-
-1.2.2 (2008-10-08)
-------------------
-
-- Added extra views for form
-
-
-1.2.1 (2008-10-08)
-------------------
-
-- Show all form errors
-
-
-1.2.0 (2008-10-06)
-------------------
-
-- Added default css styles
-
-- Removed z3c packages dependencies
-
-- Use pagelets instead of macros
-
-
-1.1.2 (2008-09-26)
-------------------
-
-- Added group support
-
-- Return added object in createAndAdd method
-
-
-1.1.1 (2008-08-05)
-------------------
-
-- Fixed wrong `for` in label tag
-
-
-1.1.0 (2008-07-22)
-------------------
-
-- Remove cancel button from edit form
-
-
-1.0.1 (2008-06-02)
-------------------
-
-- Redirect to nextURL after success 'apply'
-
-
-1.0.0 (2008-05-13)
-------------------
-
-- Use `includeDependencies` instead `autoinclude`
-
-
-0.2.0 (2008-??-??)
-------------------
-
-- Use z3c.autoinclude
-
-
-0.1.1 (2008-01-22)
-------------------
-
-- Fixed missing import in add.py
-
-
-0.1 (2008-01-19)
-----------------
-
-- Initial release

Copied: z3ext.layoutform/tags/1.3.0/CHANGES.txt (from rev 94248, z3ext.layoutform/trunk/CHANGES.txt)
===================================================================
--- z3ext.layoutform/tags/1.3.0/CHANGES.txt	                        (rev 0)
+++ z3ext.layoutform/tags/1.3.0/CHANGES.txt	2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,126 @@
+=======
+CHANGES
+=======
+
+1.3.0 (2008-12-22)
+------------------
+
+- Added subforms based on new z3ext.layout pagelet api
+
+- Fixed 'formError' status message
+
+- Use button.handler instead of buttonAndHandler
+
+- Use new pagelet api for rendering widgets
+
+
+1.2.8 (2008-11-21)
+------------------
+
+- Fixed 'formError' status message
+
+
+1.2.7 (2008-11-20)
+------------------
+
+- Use new z3ext.statusmessage api
+
+
+1.2.6 (2008-11-06)
+------------------
+
+- Use updated pagelet api for nameless pagelets
+
+
+1.2.5 (2008-10-22)
+------------------
+
+- Update translations
+
+
+1.2.4 (2008-10-20)
+------------------
+
+- Added support of display form
+
+- Added tranlsations: nl, ru
+
+
+1.2.3 (2008-10-14)
+------------------
+
+- Groups support restored
+
+- Use IPageletType for views
+
+
+1.2.2 (2008-10-08)
+------------------
+
+- Added extra views for form
+
+
+1.2.1 (2008-10-08)
+------------------
+
+- Show all form errors
+
+
+1.2.0 (2008-10-06)
+------------------
+
+- Added default css styles
+
+- Removed z3c packages dependencies
+
+- Use pagelets instead of macros
+
+
+1.1.2 (2008-09-26)
+------------------
+
+- Added group support
+
+- Return added object in createAndAdd method
+
+
+1.1.1 (2008-08-05)
+------------------
+
+- Fixed wrong `for` in label tag
+
+
+1.1.0 (2008-07-22)
+------------------
+
+- Remove cancel button from edit form
+
+
+1.0.1 (2008-06-02)
+------------------
+
+- Redirect to nextURL after success 'apply'
+
+
+1.0.0 (2008-05-13)
+------------------
+
+- Use `includeDependencies` instead `autoinclude`
+
+
+0.2.0 (2008-??-??)
+------------------
+
+- Use z3c.autoinclude
+
+
+0.1.1 (2008-01-22)
+------------------
+
+- Fixed missing import in add.py
+
+
+0.1 (2008-01-19)
+----------------
+
+- Initial release

Deleted: z3ext.layoutform/tags/1.3.0/buildout.cfg
===================================================================
--- z3ext.layoutform/trunk/buildout.cfg	2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/buildout.cfg	2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,57 +0,0 @@
-[buildout]
-develop = .
-    externals/z3ext.layout
-parts = test coverage-test coverage-report i18n i18nall i18ncheck i18ndude
-
-[test]
-recipe = zc.recipe.testrunner
-eggs = z3ext.layoutform [test]
-
-[coverage-test]
-recipe = zc.recipe.testrunner
-eggs = z3ext.layoutform [test]
-defaults = ['--coverage', '../../coverage']
-
-[coverage-report]
-recipe = zc.recipe.egg
-eggs = z3c.coverage
-scripts = coverage=coverage-report
-arguments = ('coverage', 'coverage/report')
-
-
-[i18n]
-recipe = z3c.recipe.i18n:i18n
-packages = z3ext.layoutform
-domain = z3ext.layoutform
-output = ${buildout:directory}/src/z3ext/layoutform/locales
-eggs = z3ext.layoutform [test]
-zcml =
-  <configure i18n_domain="zope"
-             xmlns:zcml="http://namespaces.zope.org/zcml"
-             xmlns:browser="http://namespaces.zope.org/browser">
-    <include package="zope.component" file="meta.zcml" />
-    <include package="zope.app.component" file="meta.zcml" />
-    <include package="zope.app.security" file="meta.zcml" />
-    <include package="zope.app.pagetemplate" file="meta.zcml" />
-    <include package="zope.app.security" />
-    <include package="zope.app.zcmlfiles" />
-    <include package="zope.app.authentication" />
-
-    <include package="z3c.autoinclude" file="meta.zcml" />
-    <include package="z3ext.layoutform" />
-  </configure>
-
-[i18nall]
-recipe = buildout_script
-template_dir = ${buildout:directory}/scripts/
-template = i18nall.in
-
-[i18ncheck]
-recipe = buildout_script
-template_dir = ${buildout:directory}/scripts/
-template = i18ncheck.in
-
-[i18ndude]
-unzip = true
-recipe = zc.recipe.egg
-eggs = i18ndude

Copied: z3ext.layoutform/tags/1.3.0/buildout.cfg (from rev 94247, z3ext.layoutform/trunk/buildout.cfg)
===================================================================
--- z3ext.layoutform/tags/1.3.0/buildout.cfg	                        (rev 0)
+++ z3ext.layoutform/tags/1.3.0/buildout.cfg	2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,56 @@
+[buildout]
+develop = .
+parts = test coverage-test coverage-report i18n i18nall i18ncheck i18ndude
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = z3ext.layoutform [test]
+
+[coverage-test]
+recipe = zc.recipe.testrunner
+eggs = z3ext.layoutform [test]
+defaults = ['--coverage', '../../coverage']
+
+[coverage-report]
+recipe = zc.recipe.egg
+eggs = z3c.coverage
+scripts = coverage=coverage-report
+arguments = ('coverage', 'coverage/report')
+
+
+[i18n]
+recipe = z3c.recipe.i18n:i18n
+packages = z3ext.layoutform
+domain = z3ext.layoutform
+output = ${buildout:directory}/src/z3ext/layoutform/locales
+eggs = z3ext.layoutform [test]
+zcml =
+  <configure i18n_domain="zope"
+             xmlns:zcml="http://namespaces.zope.org/zcml"
+             xmlns:browser="http://namespaces.zope.org/browser">
+    <include package="zope.component" file="meta.zcml" />
+    <include package="zope.app.component" file="meta.zcml" />
+    <include package="zope.app.security" file="meta.zcml" />
+    <include package="zope.app.pagetemplate" file="meta.zcml" />
+    <include package="zope.app.security" />
+    <include package="zope.app.zcmlfiles" />
+    <include package="zope.app.authentication" />
+
+    <include package="z3c.autoinclude" file="meta.zcml" />
+    <include package="z3ext.layoutform" />
+  </configure>
+
+[i18nall]
+recipe = buildout_script
+template_dir = ${buildout:directory}/scripts/
+template = i18nall.in
+
+[i18ncheck]
+recipe = buildout_script
+template_dir = ${buildout:directory}/scripts/
+template = i18ncheck.in
+
+[i18ndude]
+unzip = true
+recipe = zc.recipe.egg
+eggs = i18ndude

Deleted: z3ext.layoutform/tags/1.3.0/setup.py
===================================================================
--- z3ext.layoutform/trunk/setup.py	2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/setup.py	2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,70 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2007 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""Setup for z3ext.layoutform package
-
-$Id$
-"""
-import sys, os
-from setuptools import setup, find_packages
-
-def read(*rnames):
-    return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
-
-version='1.3.0dev'
-
-
-setup(name='z3ext.layoutform',
-      version=version,
-      description="UI Skin for z3c.form based on z3ext.layout",
-      long_description=(
-          'Detailed Documentation\n' +
-          '======================\n'
-          + '\n\n' +
-          read('CHANGES.txt')
-          ),
-      classifiers=[
-        'Development Status :: 5 - Production/Stable',
-        'Environment :: Web Environment',
-        'Intended Audience :: Developers',
-        'License :: OSI Approved :: Zope Public License',
-        'Programming Language :: Python',
-        'Natural Language :: English',
-        'Operating System :: OS Independent',
-        'Topic :: Internet :: WWW/HTTP',
-        'Framework :: Zope3'],
-      author='Nikolay Kim',
-      author_email='fafhrd91 at gmail.com',
-      url='http://z3ext.net/',
-      license='ZPL 2.1',
-      packages=find_packages('src'),
-      package_dir = {'':'src'},
-      namespace_packages=['z3ext'],
-      install_requires = ['setuptools',
-			  'zope.publisher',
-			  'zope.component',
-			  'zope.pagetemplate',
-			  'zope.app.pagetemplate',
-			  'zope.i18n',
-			  'zope.i18nmessageid',
-			  'z3c.form',
-			  'z3c.autoinclude',
-                          'z3ext.layout>=1.5.6',
-                          'z3ext.resource>=1.2.0',
-			  'z3ext.resourcepackage>=1.2.0',
-			  'z3ext.statusmessage',
-                          ],
-      extras_require = dict(test=['zope.testing']),
-      include_package_data = True,
-      zip_safe = False
-      )

Copied: z3ext.layoutform/tags/1.3.0/setup.py (from rev 94248, z3ext.layoutform/trunk/setup.py)
===================================================================
--- z3ext.layoutform/tags/1.3.0/setup.py	                        (rev 0)
+++ z3ext.layoutform/tags/1.3.0/setup.py	2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,70 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Setup for z3ext.layoutform package
+
+$Id$
+"""
+import sys, os
+from setuptools import setup, find_packages
+
+def read(*rnames):
+    return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+version='1.3.0'
+
+
+setup(name='z3ext.layoutform',
+      version=version,
+      description="UI Skin for z3c.form based on z3ext.layout",
+      long_description=(
+          'Detailed Documentation\n' +
+          '======================\n'
+          + '\n\n' +
+          read('CHANGES.txt')
+          ),
+      classifiers=[
+        'Development Status :: 5 - Production/Stable',
+        'Environment :: Web Environment',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: Zope Public License',
+        'Programming Language :: Python',
+        'Natural Language :: English',
+        'Operating System :: OS Independent',
+        'Topic :: Internet :: WWW/HTTP',
+        'Framework :: Zope3'],
+      author='Nikolay Kim',
+      author_email='fafhrd91 at gmail.com',
+      url='http://z3ext.net/',
+      license='ZPL 2.1',
+      packages=find_packages('src'),
+      package_dir = {'':'src'},
+      namespace_packages=['z3ext'],
+      install_requires = ['setuptools',
+			  'zope.publisher',
+			  'zope.component',
+			  'zope.pagetemplate',
+			  'zope.app.pagetemplate',
+			  'zope.i18n',
+			  'zope.i18nmessageid',
+			  'z3c.form',
+			  'z3c.autoinclude',
+                          'z3ext.layout',
+                          'z3ext.resource',
+			  'z3ext.resourcepackage',
+			  'z3ext.statusmessage',
+                          ],
+      extras_require = dict(test=['zope.testing']),
+      include_package_data = True,
+      zip_safe = False
+      )

Deleted: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/form.py	2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py	2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,149 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2007 Zope Foundation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""Support for Layout Templates
-
-$Id$
-"""
-from zope import interface
-from zope.component import getAdapters
-from zope.component import getMultiAdapter, queryMultiAdapter
-from zope.pagetemplate.interfaces import IPageTemplate
-
-from z3c.form import form
-from z3c.form.interfaces import IForm, IGroup, ISubForm
-
-from z3ext.layout.interfaces import IPagelet
-from z3ext.layout.pagelet import BrowserPagelet
-
-from interfaces import IPageletForm, IPageletSubform
-from interfaces import IPageletDisplayForm, IPageletFormView
-
-
-class PageletBaseForm(form.BaseForm, BrowserPagelet):
-
-    __call__ = BrowserPagelet.__call__
-
-    def render(self):
-        if self.template is not None:
-            return self.template()
-        else:
-            view = queryMultiAdapter((self, self.request), IPageletFormView)
-            if view is not None:
-                view.update()
-                return view.render()
-
-        raise LookupError("Can't find IPageletFormView view for this form.")
-
-
-class PageletForm(form.Form, PageletBaseForm):
-    interface.implements(IPageletForm)
-
-    label = u''
-    description = u''
-
-    forms = ()
-    groups = ()
-    subforms = ()
-    views = ()
-
-    render = PageletBaseForm.render
-    __call__ = PageletBaseForm.__call__
-
-    def extractData(self):
-        data, errors = super(PageletForm, self).extractData()
-        for form in self.groups:
-            if not IForm.providedBy(form):
-                continue
-
-            formData, formErrors = form.extractData()
-            data.update(formData)
-            if formErrors:
-                if errors:
-                    errors += formErrors
-                else:
-                    errors = formErrors
-
-        for form in self.subforms:
-            if not IForm.providedBy(form):
-                continue
-
-            formData, formErrors = form.extractData()
-            if formErrors:
-                if errors:
-                    errors += formErrors
-                else:
-                    errors = formErrors
-
-        return data, errors
-
-    def _loadSubforms(self):
-        return [form for name, form in 
-                getAdapters((self.context, self, self.request), IPageletSubform)]
-
-    def updateForms(self):
-        forms = []
-        groups = []
-        subforms = []
-        views = []
-        for form in self._loadSubforms():
-            form.update()
-            if not form.isAvailable():
-                continue
-
-            if IGroup.providedBy(form):
-                groups.append((form.weight, form.__name__, form))
-            elif ISubForm.providedBy(form):
-                subforms.append((form.weight, form.__name__, form))
-            elif IPageletForm.providedBy(form):
-                forms.append((form.weight, form.__name__, form))
-            else:
-                views.append((form.weight, form.__name__, form))
-
-        groups.sort()
-        self.groups = [form for weight, name, form in groups]
-
-        subforms.sort()
-        self.subforms = [form for weight, name, form in subforms]
-
-        forms.sort()
-        self.forms = [form for weight, name, form in forms]
-
-        views.sort()
-        self.views = [view for weight, name, view in views]
-
-    def update(self):
-        self.updateWidgets()
-        self.updateActions()
-        self.updateForms()
-
-        if not IPageletSubform.providedBy(self):
-            self.actions.execute()
-
-        for form in self.subforms:
-            form.postUpdate()
-        for form in self.forms:
-            form.postUpdate()
-
-    def isAvailable(self):
-        return True
-
-    def postUpdate(self):
-        self.actions.execute()
-
-
-class PageletDisplayForm(PageletForm, form.DisplayForm):
-    interface.implements(IPageletDisplayForm)
-
-    render = PageletForm.render
-    __call__ = PageletForm.__call__

Copied: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py (from rev 94247, z3ext.layoutform/trunk/src/z3ext/layoutform/form.py)
===================================================================
--- z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py	                        (rev 0)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py	2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,137 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Support for Layout Templates
+
+$Id$
+"""
+from zope import interface
+from zope.component import getAdapters
+from zope.component import getMultiAdapter, queryMultiAdapter
+from zope.pagetemplate.interfaces import IPageTemplate
+
+from z3c.form import form
+from z3c.form.interfaces import IForm, IGroup, ISubForm
+
+from z3ext.layout.interfaces import IPagelet
+from z3ext.layout.pagelet import BrowserPagelet
+
+from interfaces import IPageletForm, IPageletSubform
+from interfaces import IPageletDisplayForm, IPageletFormView
+
+
+class PageletBaseForm(form.BaseForm, BrowserPagelet):
+
+    __call__ = BrowserPagelet.__call__
+
+    def render(self):
+        if self.template is not None:
+            return self.template()
+        else:
+            view = queryMultiAdapter((self, self.request), IPageletFormView)
+            if view is not None:
+                view.update()
+                return view.render()
+
+        raise LookupError("Can't find IPageletFormView view for this form.")
+
+
+class PageletForm(form.Form, PageletBaseForm):
+    interface.implements(IPageletForm)
+
+    label = u''
+    description = u''
+
+    forms = ()
+    groups = ()
+    subforms = ()
+    views = ()
+
+    render = PageletBaseForm.render
+    __call__ = PageletBaseForm.__call__
+
+    def extractData(self):
+        data, errors = super(PageletForm, self).extractData()
+        for form in self.groups:
+            formData, formErrors = form.extractData()
+            data.update(formData)
+            if formErrors:
+                errors += formErrors
+
+        for form in self.subforms:
+            formData, formErrors = form.extractData()
+            if formErrors:
+                errors += formErrors
+
+        return data, errors
+
+    def _loadSubforms(self):
+        return [form for name, form in 
+                getAdapters((self.context, self, self.request), IPageletSubform)]
+
+    def updateForms(self):
+        forms = []
+        groups = []
+        subforms = []
+        views = []
+        for form in self._loadSubforms():
+            form.update()
+            if not form.isAvailable():
+                continue
+
+            if IGroup.providedBy(form):
+                groups.append((form.weight, form.__name__, form))
+            elif ISubForm.providedBy(form):
+                subforms.append((form.weight, form.__name__, form))
+            elif IPageletForm.providedBy(form):
+                forms.append((form.weight, form.__name__, form))
+            else:
+                views.append((form.weight, form.__name__, form))
+
+        groups.sort()
+        self.groups = [form for weight, name, form in groups]
+
+        subforms.sort()
+        self.subforms = [form for weight, name, form in subforms]
+
+        forms.sort()
+        self.forms = [form for weight, name, form in forms]
+
+        views.sort()
+        self.views = [view for weight, name, view in views]
+
+    def update(self):
+        self.updateWidgets()
+        self.updateActions()
+        self.updateForms()
+
+        if not IPageletSubform.providedBy(self):
+            self.actions.execute()
+
+        for form in self.subforms:
+            form.postUpdate()
+        for form in self.forms:
+            form.postUpdate()
+
+    def isAvailable(self):
+        return True
+
+    def postUpdate(self):
+        self.actions.execute()
+
+
+class PageletDisplayForm(PageletForm, form.DisplayForm):
+    interface.implements(IPageletDisplayForm)
+
+    render = PageletForm.render
+    __call__ = PageletForm.__call__

Copied: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/form.txt (from rev 94247, z3ext.layoutform/trunk/src/z3ext/layoutform/tests/form.txt)
===================================================================
--- z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/form.txt	                        (rev 0)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/form.txt	2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,298 @@
+===========
+PageletForm
+===========
+
+  >>> from zope import interface, component, schema
+  >>> from zope.app.testing.functional import getRootFolder
+  >>> root = getRootFolder()
+  >>> sm = component.getSiteManager()
+
+  >>> class IPerson(interface.Interface):
+  ...
+  ...     name = schema.TextLine(
+  ...         title=u'Name',
+  ...         missing_value = u'',
+  ...         required=True)
+  ...
+  ...     age = schema.Int(
+  ...         title=u'Age',
+  ...         description=u"The person's age.",
+  ...         min=0,
+  ...         default=20,
+  ...         required=False)
+
+  >>> from z3c.form import group, button
+  >>> from z3ext.layoutform import interfaces, subform
+  >>> from z3ext.layoutform import Fields, PageletForm
+
+  >>> class PersonForm(PageletForm):
+  ...
+  ...     ignoreContext = True
+  ...     fields = Fields(IPerson)
+  ...     
+  ...     @button.buttonAndHandler(u'Save', name='save',
+  ...                              provides=interfaces.ISaveAction)
+  ...     def handleSave(self, action):
+  ...         pass
+
+Let's create a request:
+
+  >>> from z3c.form.testing import TestRequest
+  >>> request = TestRequest()
+
+And support the layout form layer for our request:
+
+  >>> from z3ext.layoutform.interfaces import ILayoutFormLayer
+  >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+Now create the form:
+
+  >>> form = PersonForm(root, request)
+
+Let's now render the page. Note the output doesn't contain the layout template:
+
+  >>> form.update()
+  >>> print form.render()
+  <div class="z-form z-form-standard"><form action="http://127.0.0.1" method="post"
+          enctype="multipart/form-data" name="form" id="form">
+    <div class="z-form-fieldset">
+      <div class="z-form-field">
+        <label for="form-widgets-name" title="">Name</label>
+        <span class="z-form-fieldRequired">&nbsp;</span>
+        <div class="z-form-help"></div>
+        <div><input type="text" id="form-widgets-name"
+                name="form.widgets.name"
+                class="text-widget required textline-field" value="" />
+        </div>
+      </div>
+      <div class="z-form-field">
+        <label for="form-widgets-age" title="The person's age.">Age</label>
+        <div class="z-form-help">The person's age.</div>
+        <div><input type="text" id="form-widgets-age"
+                name="form.widgets.age" class="text-widget int-field"
+                value="20" />
+        </div>
+      </div>
+    </div>
+    <div class="z-form-controls">
+      <span>
+        <hr />
+        <input type="submit" id="form-buttons-save"
+           name="form.buttons.save"
+           class="z-form-savebutton button-field" value="Save" />
+      </span>
+    </div>
+  </form>
+  </div>
+
+Subforms
+
+  >>> class IPersonEducation(interface.Interface):
+  ...
+  ...     education = schema.TextLine(
+  ...         title = u'Education',
+  ...         default = u'',
+  ...         required = False)
+
+Group
+
+
+  >>> class PersonEducation(group.Group):
+  ...     interface.implements(interfaces.IPageletSubform)
+  ...     
+  ...     weight = 10
+  ...     fields = Fields(IPersonEducation)
+  ...     ignoreContext = True
+  ...     
+  ...     def __init__(self, context, form, request):
+  ...         super(PersonEducation, self).__init__(context, request, form)
+  ...         
+  ...     def isAvailable(self):
+  ...         return True
+  ...     
+  ...     def postUpdate(self):
+  ...         pass
+
+  >>> form.groups
+  []
+
+  >>> component.getSiteManager().registerAdapter(
+  ...     PersonEducation, (interface.Interface, PersonForm, interface.Interface),
+  ...     interfaces.IPageletSubform, name='edu')
+
+  >>> form.update()
+
+  >>> print form.groups
+  [<PersonEducation ...>]
+
+  >>> print form.render()
+  <div class="z-form z-form-standard"><form action="http://127.0.0.1" method="post"
+          enctype="multipart/form-data" name="form" id="form">
+    <div class="z-form-fieldset">
+      <div class="z-form-field">
+        <label for="form-widgets-name" title="">Name</label>
+        <span class="z-form-fieldRequired">&nbsp;</span>
+        <div class="z-form-help"></div>
+        <div><input type="text" id="form-widgets-name"
+            name="form.widgets.name"
+            class="text-widget required textline-field" value="" />
+        </div>
+      </div>
+      <div class="z-form-field">
+        <label for="form-widgets-age" title="The person's age.">Age</label>
+        <div class="z-form-help">The person's age.</div>
+        <div><input type="text" id="form-widgets-age"
+            name="form.widgets.age" class="text-widget int-field"
+            value="20" />
+        </div>
+       </div>
+      </div>
+      <div class="z-form-group">
+        <div class="z-form-fieldset">
+          <div class="z-form-field">
+            <label for="form-widgets-education" title="">Education</label>
+            <div class="z-form-help"></div>
+            <div><input type="text" id="form-widgets-education"
+               name="form.widgets.education"
+               class="text-widget textline-field" value="" />
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="z-form-controls">
+        <span>
+          <hr />
+          <input type="submit" id="form-buttons-save"
+             name="form.buttons.save"
+             class="z-form-savebutton button-field" value="Save" />
+        </span>
+      </div>
+    </form>
+  </div>
+
+Subform
+
+  >>> class IPersonInfo(interface.Interface):
+  ...
+  ...     info = schema.Text(
+  ...         title=u'Information',
+  ...         default = u'',
+  ...         required=False)
+
+  >>> class PersonInfo(subform.PageletEditSubForm):
+  ...     interface.implements(interfaces.IPageletSubform)
+  ...     
+  ...     weight = 10
+  ...     fields = Fields(IPersonInfo)
+  ...     ignoreContext = True
+  ...     
+  ...     def getContent(self):
+  ...         return {}
+
+  >>> form.subforms
+  []
+
+  >>> component.getSiteManager().registerAdapter(
+  ...     PersonInfo, (interface.Interface, PersonForm, interface.Interface),
+  ...     interfaces.IPageletSubform, name='info')
+
+  >>> form.update()
+
+  >>> print form.subforms
+  [<PersonInfo ...>]
+
+  >>> print form.render()
+  <div class="z-form z-form-standard">...
+  ...
+  <label for="form-widgets-info" title="">Information</label>
+  <div class="z-form-help"></div>
+  <div><textarea id="form-widgets-info" name="form.widgets.info"
+          class="textarea-widget text-field" rows="5"></textarea>
+  </div>
+  ...
+  </div>
+
+  >>> request = TestRequest(
+  ...     form={'form.widgets.name': u'',
+  ...           'form.widgets.age': u'50',
+  ...           'form.widgets.education': 'University',
+  ...           'form.widgets.info': 'info',
+  ...           'form.buttons.save': u'Save'})
+  >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+  >>> form = PersonForm(root, request)
+  >>> form.update()
+  >>> form.extractData()
+  ({'age': 50}, (<ErrorViewSnippet for RequiredMissing>, <ErrorViewSnippet for WrongType>, <ErrorViewSnippet for WrongType>))
+
+  >>> request = TestRequest(
+  ...     form={'form.widgets.name': u'',
+  ...           'form.widgets.age': u'50',
+  ...           'form.widgets.education': u'University',
+  ...           'form.widgets.info': u'info',
+  ...           'form.buttons.save': u'Save'})
+  >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+  >>> form = PersonForm(root, request)
+  >>> form.update()
+  >>> data = form.extractData()
+  >>> print form.render()
+  <div class="z-form z-form-standard">...
+  ...
+  <div class="z-form-field error">
+     <label for="form-widgets-name" title="">Name</label>
+     <span class="z-form-fieldRequired">&nbsp;</span>
+     <div class="error">Required input is missing.</div>
+     <div class="z-form-help"></div>
+     <div><input type="text" id="form-widgets-name"
+           name="form.widgets.name"
+           class="text-widget required textline-field" value="" />
+     </div>
+  </div>
+  ...
+  </div>
+
+  >>> request = TestRequest(
+  ...     form={'form.widgets.name': u'Nikolay',
+  ...           'form.widgets.age': u'50',
+  ...           'form.widgets.education': u'University',
+  ...           'form.widgets.info': u'info',
+  ...           'form.buttons.save': u'Save'})
+  >>> interface.alsoProvides(request, ILayoutFormLayer)
+  >>> form = PersonForm(root, request)
+  >>> form.update()
+  >>> form.extractData()
+  ({'age': 50, 'education': u'University', 'name': u'Nikolay'}, ())
+
+
+  >>> class IItem(interface.Interface):
+  ...     
+  ...     title = schema.TextLine(
+  ...         title = u'Title',
+  ...         required = True)
+
+
+  >>> class ItemForm(PageletForm):
+  ...     prefix = 'title.'
+  ...     fields = Fields(IItem)
+  ...     ignoreContext = True
+  ...     weight = 0
+
+  >>> component.getSiteManager().registerAdapter(
+  ...     ItemForm, (interface.Interface, PersonForm, interface.Interface),
+  ...     interfaces.IPageletSubform, name='item')
+
+  >>> request = TestRequest(
+  ...     form={'form.widgets.name': u'Nikolay',
+  ...           'form.widgets.age': u'50',
+  ...           'form.widgets.education': u'University',
+  ...           'form.widgets.info': u'info',
+  ...           'form.buttons.save': u'Save'})
+  >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+  >>> form = PersonForm(root, request)
+  >>> form.update()
+
+  >>> form.forms
+  [<ItemForm object ...>]
+

Deleted: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/tests/ftesting.zcml	2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml	2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,14 +0,0 @@
-<configure
-   xmlns="http://namespaces.zope.org/zope">
-
-  <include package="zope.component" file="meta.zcml" />
-  <include package="zope.app.component" file="meta.zcml" />
-  <include package="zope.app.security" file="meta.zcml" />
-  <include package="zope.app.pagetemplate" file="meta.zcml" />
-  <include package="zope.app.security" />
-  <include package="zope.app.zcmlfiles" />
-
-  <include package="z3c.autoinclude" file="meta.zcml" />
-  <include package="z3ext.layoutform" />
-
-</configure>

Copied: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml (from rev 94247, z3ext.layoutform/trunk/src/z3ext/layoutform/tests/ftesting.zcml)
===================================================================
--- z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml	                        (rev 0)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml	2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,15 @@
+<configure
+   xmlns="http://namespaces.zope.org/zope">
+
+  <include package="zope.component" file="meta.zcml" />
+  <include package="zope.app.component" file="meta.zcml" />
+  <include package="zope.app.security" file="meta.zcml" />
+  <include package="zope.app.pagetemplate" file="meta.zcml" />
+  <include package="zope.app.security" />
+  <include package="zope.app.zcmlfiles" />
+
+  <include package="z3c.autoinclude" file="meta.zcml" />
+  <include package="z3ext.layoutform" />
+  <adapter factory="z3ext.statusmessage.tests.tests.getSession" />
+
+</configure>

Deleted: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/tests/tests.py	2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py	2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,33 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2008 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""
-
-$Id:  2007-12-12 12:27:02Z fafhrd $
-"""
-import unittest, os
-from zope.testing import doctest
-from zope.app.testing.functional import ZCMLLayer, FunctionalDocFileSuite
-
-layoutformLayer = ZCMLLayer(
-    os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'),
-    __name__, 'layoutformLayer', allow_teardown=True)
-
-
-def test_suite():
-    tests = FunctionalDocFileSuite(
-        "tests.txt",
-        optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE)
-    tests.layer = layoutformLayer
-
-    return unittest.TestSuite((tests,))

Copied: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py (from rev 94247, z3ext.layoutform/trunk/src/z3ext/layoutform/tests/tests.py)
===================================================================
--- z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py	                        (rev 0)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py	2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,38 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+
+$Id:  2007-12-12 12:27:02Z fafhrd $
+"""
+import unittest, os
+from zope.testing import doctest
+from zope.app.testing.functional import ZCMLLayer, FunctionalDocFileSuite
+
+layoutformLayer = ZCMLLayer(
+    os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'),
+    __name__, 'layoutformLayer', allow_teardown=True)
+
+
+def test_suite():
+    form = FunctionalDocFileSuite(
+        "form.txt",
+        optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE)
+    form.layer = layoutformLayer
+
+    tests = FunctionalDocFileSuite(
+        "tests.txt",
+        optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE)
+    tests.layer = layoutformLayer
+
+    return unittest.TestSuite((form, tests,))



More information about the Checkins mailing list