[Checkins] SVN: megrok.z3cform.wizard/ Initial import of megork.z3cform.wizard from dolmen repos
Christian Klinger
cklinger at novareto.de
Mon Sep 14 11:42:12 EDT 2009
Log message for revision 103950:
Initial import of megork.z3cform.wizard from dolmen repos
Changed:
A megrok.z3cform.wizard/branches/
A megrok.z3cform.wizard/tags/
A megrok.z3cform.wizard/trunk/
A megrok.z3cform.wizard/trunk/README.txt
A megrok.z3cform.wizard/trunk/bootstrap.py
A megrok.z3cform.wizard/trunk/buildout.cfg
A megrok.z3cform.wizard/trunk/docs/
A megrok.z3cform.wizard/trunk/docs/HISTORY.txt
A megrok.z3cform.wizard/trunk/setup.py
A megrok.z3cform.wizard/trunk/src/
A megrok.z3cform.wizard/trunk/src/megrok/
A megrok.z3cform.wizard/trunk/src/megrok/__init__.py
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/__init__.py
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/__init__.py
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/components.py
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/configure.zcml
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/formelements.pt
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/ftesting.zcml
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/meta.py
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/meta.zcml
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/__init__.py
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_layout_wizard_templates/
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_layout_wizard_templates/layout.pt
A megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_wizard.py
A megrok.z3cform.wizard/trunk/versions.cfg
-=-
Added: megrok.z3cform.wizard/trunk/README.txt
===================================================================
--- megrok.z3cform.wizard/trunk/README.txt (rev 0)
+++ megrok.z3cform.wizard/trunk/README.txt 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,4 @@
+Introduction
+============
+
+
Added: megrok.z3cform.wizard/trunk/bootstrap.py
===================================================================
--- megrok.z3cform.wizard/trunk/bootstrap.py (rev 0)
+++ megrok.z3cform.wizard/trunk/bootstrap.py 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,84 @@
+##############################################################################
+#
+# Copyright (c) 2006 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.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id$
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+is_jython = sys.platform.startswith('java')
+
+try:
+ import pkg_resources
+except ImportError:
+ ez = {}
+ exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+ ).read() in ez
+ ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+ import pkg_resources
+
+if sys.platform == 'win32':
+ def quote(c):
+ if ' ' in c:
+ return '"%s"' % c # work around spawn lamosity on windows
+ else:
+ return c
+else:
+ def quote (c):
+ return c
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+ws = pkg_resources.working_set
+
+if len(sys.argv) > 2 and sys.argv[1] == '--version':
+ VERSION = '==%s' % sys.argv[2]
+ args = sys.argv[3:] + ['bootstrap']
+else:
+ VERSION = ''
+ args = sys.argv[1:] + ['bootstrap']
+
+if is_jython:
+ import subprocess
+
+ assert subprocess.Popen([sys.executable] + ['-c', quote(cmd), '-mqNxd',
+ quote(tmpeggs), 'zc.buildout' + VERSION],
+ env=dict(os.environ,
+ PYTHONPATH=
+ ws.find(pkg_resources.Requirement.parse('setuptools')).location
+ ),
+ ).wait() == 0
+
+else:
+ assert os.spawnle(
+ os.P_WAIT, sys.executable, quote (sys.executable),
+ '-c', quote (cmd), '-mqNxd', quote (tmpeggs), 'zc.buildout' + VERSION,
+ dict(os.environ,
+ PYTHONPATH=
+ ws.find(pkg_resources.Requirement.parse('setuptools')).location
+ ),
+ ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout' + VERSION)
+import zc.buildout.buildout
+zc.buildout.buildout.main(args)
+shutil.rmtree(tmpeggs)
Added: megrok.z3cform.wizard/trunk/buildout.cfg
===================================================================
--- megrok.z3cform.wizard/trunk/buildout.cfg (rev 0)
+++ megrok.z3cform.wizard/trunk/buildout.cfg 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,21 @@
+[buildout]
+develop = .
+parts = sources test
+extends = versions.cfg
+versions = versions
+newest = false
+
+[versions]
+z3c.pagelet = 1.0.3
+
+[sources]
+recipe=infrae.subversion
+repository=svn://svn.zope.org/repos/main/megrok.z3cform.base megrok.z3cform.base
+as_eggs=True
+
+
+[test]
+recipe = zc.recipe.testrunner
+eggs =
+ megrok.z3cform.wizard
+defaults = ['--tests-pattern', '^f?tests$', '-v', '-c']
Added: megrok.z3cform.wizard/trunk/docs/HISTORY.txt
===================================================================
--- megrok.z3cform.wizard/trunk/docs/HISTORY.txt (rev 0)
+++ megrok.z3cform.wizard/trunk/docs/HISTORY.txt 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,7 @@
+Changelog
+=========
+
+0.1 (xxxx-xx-xx)
+----------------
+
+* Initial release
Added: megrok.z3cform.wizard/trunk/setup.py
===================================================================
--- megrok.z3cform.wizard/trunk/setup.py (rev 0)
+++ megrok.z3cform.wizard/trunk/setup.py 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,36 @@
+from setuptools import setup, find_packages
+import os
+
+version = '0.1'
+
+setup(name='megrok.z3cform.wizard',
+ version=version,
+ description="grok add on for createing an Wizard",
+ long_description=open("README.txt").read() + "\n" +
+ open(os.path.join("docs", "HISTORY.txt")).read(),
+ # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+ classifiers=[
+ "Programming Language :: Python",
+ "Topic :: Software Development :: Libraries :: Python Modules",
+ ],
+ keywords='grok z3c.form megrok.z3cform.wizard',
+ author='Christian Klinger',
+ author_email='cklinger at novareto.de',
+ url='',
+ license='GPL',
+ package_dir={'':'src'},
+ packages=find_packages('src', exclude=['ez_setup']),
+ namespace_packages=['megrok', 'megrok.z3cform'],
+ include_package_data=True,
+ zip_safe=False,
+ install_requires=[
+ 'setuptools',
+ 'z3c.wizard',
+ 'grok',
+ 'megrok.z3cform.base',
+ 'megrok.pagetemplate',
+ ],
+ entry_points="""
+ # -*- Entry points: -*-
+ """,
+ )
Added: megrok.z3cform.wizard/trunk/src/megrok/__init__.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/__init__.py (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/__init__.py 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/__init__.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/__init__.py (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/__init__.py 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/__init__.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/__init__.py (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/__init__.py 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,2 @@
+from z3c.wizard.interfaces import IWizard
+from components import WizardForm, Step, LayoutStep
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/components.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/components.py (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/components.py 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,55 @@
+import martian
+import grokcore.view
+import megrok.layout
+
+from z3c.form import form
+from zope import component
+from z3c.wizard import wizard, step
+from megrok.z3cform.base import PageForm, Form
+from zope.publisher.publish import mapply
+
+class WizardForm(Form, wizard.Wizard, grokcore.view.View):
+ """Base Class for a z3c.wizdard.
+ """
+ martian.baseclass()
+
+ def update(self):
+ self.updateForm()
+
+class BaseStep(step.EditStep):
+ """ Base Step
+ """
+
+class Step(BaseStep):
+ """A Step for the Witzard
+ """
+ def __call__(self):
+ 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
+ return self.render()
+
+
+class LayoutStep(BaseStep):
+ """A Step for the Witzard
+ """
+
+ def _render_template(self):
+ assert not (self.template is None)
+ if IGrokTemplate.providedBy(self.template):
+ return super(Form, self)._render_template()
+ return self.template(self)
+
+ def __call__(self):
+ 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
+ if self.layout is None:
+ layout = component.getMultiAdapter(
+ (self.context, self.request), megrok.layout.ILayout)
+ return layout(self)
+ return self.layout()
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/configure.zcml
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/configure.zcml (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/configure.zcml 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,18 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:z3c="http://namespaces.zope.org/z3c">
+
+ <include package="megrok.z3cform.base" file="meta.zcml" />
+ <include package="megrok.z3cform.base" />
+ <include package="z3c.template" file="meta.zcml"/>
+ <include package="z3c.macro"/>
+ <include package="z3c.macro" file="meta.zcml"/>
+ <include package="z3c.wizard"/>
+
+ <z3c:macro
+ name="widget-rows"
+ macro="widget-rows"
+ template="formelements.pt"
+ />
+
+</configure>
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/formelements.pt
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/formelements.pt (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/formelements.pt 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,30 @@
+<div>
+ <metal:block define-macro="widget-rows">
+ <tal:block repeat="widget view/widgets/values">
+ <div id="" class="row"
+ tal:attributes="id string:${widget/id}-row"
+ tal:condition="python:widget.mode != 'hidden'">
+ <metal:block define-macro="widget-row">
+ <div class="label">
+ <label tal:attributes="for widget/id">
+ <span i18n:translate=""
+ tal:content="widget/label">label</span>
+ <span class="required"
+ tal:condition="widget/required">*</span>
+ </label>
+ </div>
+ <div class="widget" tal:content="structure widget/render">
+ <input type="text" size="24" value="" />
+ </div>
+ <div class="error"
+ tal:condition="widget/error">
+ <span tal:replace="structure widget/error/render">error</span>
+ </div>
+ </metal:block>
+ </div>
+ <input type="hidden" value=""
+ tal:condition="python:widget.mode == 'hidden'"
+ tal:replace="structure widget/render" />
+ </tal:block>
+ </metal:block>
+</div>
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/ftesting.zcml
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/ftesting.zcml (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/ftesting.zcml 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,36 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:grok="http://namespaces.zope.org/grok">
+
+ <include package="grok" />
+ <include package="grok" file="meta.zcml"/>
+ <include package="megrok.z3cform.wizard" file="meta.zcml" />
+ <include package="megrok.z3cform.wizard" />
+ <include package="megrok.z3cform.base" file="default_form_layer.zcml"/>
+
+ <grok:grok package="megrok.z3cform.wizard.tests" />
+ <securityPolicy
+ component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy"
+ />
+
+ <unauthenticatedPrincipal
+ id="zope.anybody"
+ title="Unauthenticated User"
+ />
+ <grant
+ permission="zope.View"
+ principal="zope.anybody"
+ />
+
+ <principal
+ id="zope.mgr"
+ title="Manager"
+ login="mgr"
+ password="mgrpw"
+ />
+
+ <role id="zope.Manager" title="Site Manager" />
+ <grantAll role="zope.Manager" />
+ <grant role="zope.Manager" principal="zope.mgr" />
+</configure>
+
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/meta.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/meta.py (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/meta.py 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,19 @@
+import martian
+import grokcore.component
+
+from megrok.z3cform.wizard import components
+from z3c.wizard.zcml import wizardStepDirective
+from grokcore.view.meta.views import default_view_name
+
+
+class WizardStepGrokker(martian.ClassGrokker):
+ martian.component(components.BaseStep)
+ martian.directive(grokcore.component.context)
+ martian.directive(grokcore.component.name, get_default=default_view_name)
+
+ def execute(self, factory, config, context, name, **kw):
+
+ wizardStepDirective(config, factory, name,
+ 'zope.Public', wizard=context)
+ return True
+
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/meta.zcml
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/meta.zcml (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/meta.zcml 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,10 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:grok="http://namespaces.zope.org/grok">
+
+ <include package="grokcore.component" file="meta.zcml"/>
+
+ <grok:grok package=".meta" />
+
+</configure>
+
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/__init__.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/__init__.py (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/__init__.py 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,9 @@
+import os.path
+import megrok.z3cform.wizard
+from zope.app.testing.functional import ZCMLLayer
+
+ftesting_zcml = os.path.join(os.path.dirname(megrok.z3cform.wizard.__file__),
+ 'ftesting.zcml')
+FunctionalLayer = ZCMLLayer(ftesting_zcml, __name__, 'FunctionalLayer',
+ allow_teardown=True)
+
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_layout_wizard_templates/layout.pt
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_layout_wizard_templates/layout.pt (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_layout_wizard_templates/layout.pt 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,7 @@
+<html>
+ <body>
+ <div class="layout" tal:content="structure view/render">
+ here comes the content
+ </div>
+ </body>
+</html>
Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_wizard.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_wizard.py (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_wizard.py 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,209 @@
+"""
+megrok wizard
+=============
+
+basic setup
+-----------
+
+ >>> from zope.app.testing.functional import getRootFolder
+ >>> root = getRootFolder()
+
+ >>> from zope import component
+ >>> from zope.interface import alsoProvides
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+
+ >>> person = Person()
+ >>> root['person'] = person
+ >>> person.__parent__ = root
+ >>> person.__name__ = u'person'
+
+ >>> from zope.component import getMultiAdapter
+ >>> pw = getMultiAdapter((person, request), name=u"personwizard")
+ >>> pw
+ <PersonWizard 'personwizard'>
+
+ >>> obj, names = pw.browserDefault(request)
+ >>> obj
+ <PersonWizard 'personwizard'>
+
+ >>> names
+ ('personstep',)
+
+Render the personStep
+
+ >>> personStep = obj.publishTraverse(request, names[0])
+ >>> personStep.update()
+ >>> page = personStep.render()
+ >>> print page
+ <div class="wizard">
+ <div class="header">Person Wizard</div>
+ <div class="wizardMenu">
+ <span class="selected">
+ <span>Person</span>
+ </span>
+ <span>
+ <a href="http://127.0.0.1/person/personwizard/addressstep">Address</a>
+ </span>
+ </div>
+ <form action="http://127.0.0.1" method="post"
+ enctype="multipart/form-data" class="edit-form"
+ id="form">
+ <div class="viewspace">
+ <div class="label">Person</div>
+ <div class="required-info">
+ <span class="required">*</span>
+ – required
+ </div>
+ <div class="step">
+ <div id="form-widgets-firstName-row" class="row">
+ <div class="label">
+ <label for="form-widgets-firstName">
+ <span>First Name</span>
+ <span class="required">*</span>
+ </label>
+ </div>
+ <div class="widget">
+ <input id="form-widgets-firstName"
+ name="form.widgets.firstName"
+ class="text-widget required textline-field"
+ value="" type="text" />
+ </div>
+ </div>
+ <div id="form-widgets-lastName-row" class="row">
+ <div class="label">
+ <label for="form-widgets-lastName">
+ <span>Last Name</span>
+ <span class="required">*</span>
+ </label>
+ </div>
+ <div class="widget">
+ <input id="form-widgets-lastName"
+ name="form.widgets.lastName"
+ class="text-widget required textline-field"
+ value="" type="text" />
+ </div>
+ </div>
+ </div>
+ <div>
+ <div class="buttons">
+ <span class="back">
+ </span>
+ <span class="step">
+ <input id="form-buttons-apply" name="form.buttons.apply"
+ class="submit-widget button-field" value="Apply"
+ type="submit" />
+ </span>
+ <span class="forward">
+ <input id="form-buttons-next" name="form.buttons.next"
+ class="submit-widget button-field" value="Next"
+ type="submit" />
+ </span>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+
+Sending an request but with no data
+
+ >>> request = TestRequest(form={'form.buttons.next': 'Next'})
+ >>> personWizard = PersonWizard(person, request)
+ >>> personWizard.__parent__ = person
+ >>> personWizard.__name__ = u'wizard'
+ >>> personStep = personWizard.publishTraverse(request, names[0])
+ >>> personStep.update()
+ >>> print personStep.render()
+ <div class="wizard">
+ ...
+ <div class="summary">There were some errors.</div>
+ ...
+ <div class="error">Required input is missing.</div>
+ ...
+ <div class="error">Required input is missing.</div>
+ ...
+
+Sending an request with a working data set...
+
+ >>> request = TestRequest(form={'form.widgets.firstName': u'Roger',
+ ... 'form.widgets.lastName': u'Ineichen',
+ ... 'form.buttons.next': 'Next'})
+ >>> personWizard = PersonWizard(person, request)
+ >>> personWizard.__parent__ = person
+ >>> personWizard.__name__ = u'wizard'
+ >>> personStep = personWizard.publishTraverse(request, names[0])
+ >>> personStep.update()
+ >>> print personStep.render()
+
+ >>> print personWizard.nextURL
+ http://127.0.0.1/person/wizard/addressstep
+
+"""
+
+import grokcore.component as grok
+import zope.schema
+import zope.interface
+
+from megrok.z3cform import wizard as z3cwizard
+from z3c.wizard import wizard, step
+from zope.location.interfaces import ILocation
+from zope.schema.fieldproperty import FieldProperty
+from z3c.form import field
+
+class IPerson(ILocation):
+ """Person interface."""
+
+ firstName = zope.schema.TextLine(title=u'First Name')
+ lastName = zope.schema.TextLine(title=u'Last Name')
+ street = zope.schema.TextLine(title=u'Street')
+ city = zope.schema.TextLine(title=u'City')
+
+
+class Person(object):
+ """Person content."""
+ grok.implements(IPerson)
+
+ __name__ = __parent__ = None
+
+ firstName = FieldProperty(IPerson['firstName'])
+ lastName = FieldProperty(IPerson['lastName'])
+ street = FieldProperty(IPerson['street'])
+ city = FieldProperty(IPerson['city'])
+
+class IPersonWizard(z3cwizard.IWizard):
+ """Person wizard marker."""
+
+class PersonWizard(z3cwizard.WizardForm):
+ """ Wizard form."""
+ grok.implements(IPersonWizard)
+ grok.context(Person)
+
+ label = u'Person Wizard'
+
+ def setUpSteps(self):
+ return [
+ step.addStep(self, 'personstep', weight=1),
+ step.addStep(self, 'addressstep', weight=2),
+ ]
+
+
+class PersonStep(z3cwizard.Step):
+ grok.context(PersonWizard)
+ label = u'Person'
+ fields = field.Fields(IPerson).select('firstName', 'lastName')
+
+
+class AddressStep(z3cwizard.Step):
+ grok.context(PersonWizard)
+ label = u'Address'
+ fields = field.Fields(IPerson).select('street', 'city')
+
+
+def test_suite():
+ from zope.testing import doctest
+ from megrok.z3cform.wizard.tests import FunctionalLayer
+ suite = doctest.DocTestSuite(
+ optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+ suite.layer = FunctionalLayer
+ return suite
+
Added: megrok.z3cform.wizard/trunk/versions.cfg
===================================================================
--- megrok.z3cform.wizard/trunk/versions.cfg (rev 0)
+++ megrok.z3cform.wizard/trunk/versions.cfg 2009-09-14 15:42:12 UTC (rev 103950)
@@ -0,0 +1,110 @@
+[versions]
+ClientForm = 0.2.9
+grokcore.component = 1.7
+grokcore.formlib = 1.1
+grokcore.security = 1.1
+grokcore.view = 1.7
+grokcore.viewlet = 1.0
+grokui.admin = 0.3.2
+martian = 0.11
+mechanize = 0.1.7b
+pytz = 2007k
+RestrictedPython = 3.4.2
+simplejson = 1.7.1
+z3c.autoinclude = 0.2.2
+z3c.flashmessage = 1.0
+z3c.testsetup = 0.2.1
+zc.catalog = 1.2.0
+ZConfig = 2.5.1
+zc.recipe.testrunner = 1.0.0
+zdaemon = 2.0.2
+ZODB3 = 3.8.1
+zodbcode = 3.4.0
+zope.annotation = 3.4.1
+zope.app.apidoc = 3.4.3
+zope.app.applicationcontrol = 3.4.3
+zope.app.appsetup = 3.4.1
+zope.app.authentication = 3.4.4
+zope.app.basicskin = 3.4.0
+zope.app.broken = 3.4.0
+zope.app.catalog = 3.5.1
+zope.app.component = 3.4.1
+zope.app.container = 3.5.6
+zope.app.content = 3.4.0
+zope.app.debug = 3.4.1
+zope.app.dependable = 3.4.0
+zope.app.error = 3.5.1
+zope.app.exception = 3.4.1
+zope.app.file = 3.4.4
+zope.app.folder = 3.4.0
+zope.app.form = 3.4.1
+zope.app.generations = 3.4.1
+zope.app.http = 3.4.1
+zope.app.i18n = 3.4.4
+zope.app.interface = 3.4.0
+zope.app.intid = 3.4.1
+zope.app.keyreference = 3.4.1
+zope.app.locales = 3.4.5
+zope.app.onlinehelp = 3.4.1
+zope.app.pagetemplate = 3.4.1
+zope.app.preference = 3.4.1
+zope.app.principalannotation = 3.4.0
+zope.app.publication = 3.4.3
+zope.app.publisher = 3.5.1
+zope.app.renderer = 3.4.0
+zope.app.rotterdam = 3.4.1
+zope.app.schema = 3.4.0
+zope.app.security = 3.5.2
+zope.app.securitypolicy = 3.4.6
+zope.app.server = 3.4.2
+zope.app.session = 3.5.1
+zope.app.skins = 3.4.0
+zope.app.testing = 3.4.3
+zope.app.tree = 3.4.0
+zope.app.twisted = 3.4.1
+zope.app.wsgi = 3.4.1
+zope.app.zapi = 3.4.0
+zope.app.zcmlfiles = 3.4.3
+zope.app.zopeappgenerations = 3.4.0
+zope.cachedescriptors = 3.4.1
+zope.component = 3.4.0
+zope.configuration = 3.4.0
+zope.contentprovider = 3.4.0
+zope.contenttype = 3.4.0
+zope.copypastemove = 3.4.0
+zope.datetime = 3.4.0
+zope.deferredimport = 3.4.0
+zope.deprecation = 3.4.0
+zope.dottedname = 3.4.2
+zope.dublincore = 3.4.0
+zope.error = 3.5.1
+zope.event = 3.4.0
+zope.exceptions = 3.4.0
+zope.filerepresentation = 3.4.0
+zope.formlib = 3.4.0
+zope.hookable = 3.4.0
+zope.i18n = 3.4.0
+zope.i18nmessageid = 3.4.3
+zope.index = 3.4.1
+zope.interface = 3.4.1
+zope.lifecycleevent = 3.4.0
+zope.location = 3.4.0
+zope.minmax = 1.1.0
+zope.modulealias = 3.4.0
+zope.pagetemplate = 3.4.0
+zope.proxy = 3.4.2
+zope.publisher = 3.4.9
+zope.schema = 3.4.0
+zope.security = 3.4.1
+zope.securitypolicy = 3.4.1
+zope.server = 3.4.3
+zope.session = 3.4.1
+zope.size = 3.4.0
+zope.structuredtext = 3.4.0
+zope.tal = 3.4.1
+zope.tales = 3.4.0
+zope.testbrowser = 3.4.2
+zope.testing = 3.7.6
+zope.thread = 3.4
+zope.traversing = 3.4.1
+zope.viewlet = 3.4.2
More information about the checkins
mailing list