[Checkins] SVN: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/ Working on more tests for the wizard story...
Christian Klinger
cklinger at novareto.de
Tue Jul 7 09:27:57 EDT 2009
Log message for revision 101701:
Working on more tests for the wizard story...
Changed:
U megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py
U megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py
U megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/interfaces.py
U megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py
U megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/skin.py
U megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_wizard.py
-=-
Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py 2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py 2009-07-07 13:27:56 UTC (rev 101701)
@@ -2,10 +2,10 @@
from components import Form, AddForm, EditForm, DisplayForm
from components import PageForm, PageAddForm, PageEditForm, PageDisplayForm
from components import WidgetTemplate
+from directives import field
+from skin import FormLayer, TableLayer
+from utils import apply_data_event
from wizard import WizardForm, Step
+from z3c.form import widget, field, button, action
+from z3c.form.form import extends
from z3c.wizard.interfaces import IWizard
-from skin import FormLayer, TableLayer
-from directives import field
-from z3c.form import widget, field, button, action
-from z3c.form.form import extends
-from utils import apply_data_event
Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py 2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/directives.py 2009-07-07 13:27:56 UTC (rev 101701)
@@ -2,18 +2,21 @@
from martian import validateInterfaceOrClass
from z3c.form import interfaces
+
class field(martian.Directive):
scope = martian.CLASS
store = martian.ONCE
default = None
# validate = validateInterfaceOrClass
+
class mode(martian.Directive):
scope = martian.CLASS
store = martian.ONCE
- default = interfaces.INPUT_MODE
+ default = interfaces.INPUT_MODE
# validate = validateInterfaceOrClass
+
class widget(martian.Directive):
scope = martian.CLASS
store = martian.ONCE
Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/interfaces.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/interfaces.py 2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/interfaces.py 2009-07-07 13:27:56 UTC (rev 101701)
@@ -1,6 +1,6 @@
-
from zope import interface
+
class IGrokForm(interface.Interface):
"""A grok z3c form. This marker interface is used to have a
different default template.
Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py 2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/meta.py 2009-07-07 13:27:56 UTC (rev 101701)
@@ -6,7 +6,7 @@
from z3c.form import field
from martian.error import GrokError
-from megrok.z3cform import wizard
+from megrok.z3cform import wizard
from zope.interface import Interface
from megrok.z3cform import directives
from megrok.z3cform import components
@@ -20,7 +20,6 @@
def get_auto_fields(context):
"""Get the form fields for context.
-
This methods is the same than for formlib implementation, but use
z3cform fields instead.
"""
@@ -47,7 +46,7 @@
# Set fields by default.
if isinstance(form.fields, components.DefaultFields):
form.fields = get_auto_fields(context)
-
+
# Don't override render method.
if not getattr(form.render, 'base_method', False):
raise GrokError(
@@ -72,13 +71,15 @@
def grok(self, name, factory, module_info, **kw):
factory.module_info = module_info
- return super(WidgetTemplateGrokker, self).grok(name, factory, module_info, **kw)
+ return super(WidgetTemplateGrokker, self).grok(
+ name, factory, module_info, **kw)
- def execute(self, factory, config, context, layer, template, view, field, widget, mode, **kw):
+ def execute(self, factory, config, context, layer,
+ template, view, field, widget, mode, **kw):
template_path = '/'.join(factory.module_info.path.split('/')[:-1])
- template = "%s/%s" %(template_path, template)
- widgetTemplateDirective(config, template, context, layer,
- view=view, field=field, widget=widget, mode=mode)
+ template = "%s/%s" %(template_path, template)
+ widgetTemplateDirective(config, template, context, layer,
+ view=view, field=field, widget=widget, mode=mode)
return True
@@ -89,6 +90,6 @@
def execute(self, factory, config, context, name, **kw):
- wizardStepDirective(config, factory, name, 'zope.Public', wizard=context)
+ wizardStepDirective(config, factory, name,
+ 'zope.Public', wizard=context)
return True
-
Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/skin.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/skin.py 2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/skin.py 2009-07-07 13:27:56 UTC (rev 101701)
@@ -1,10 +1,17 @@
-import grok
+import grok
import z3c.formui.interfaces
+
from z3c.form.interfaces import IFormLayer
-class FormLayer(grok.IDefaultBrowserLayer, IFormLayer, z3c.formui.interfaces.IDivFormLayer):
+
+class FormLayer(grok.IDefaultBrowserLayer,
+ IFormLayer,
+ z3c.formui.interfaces.IDivFormLayer):
""" A div -based layer for a z3c.forms"""
-class TableLayer(grok.IDefaultBrowserLayer, IFormLayer, z3c.formui.interfaces.ITableFormLayer):
+
+class TableLayer(grok.IDefaultBrowserLayer,
+ IFormLayer,
+ z3c.formui.interfaces.ITableFormLayer):
""" A table -based layer for a z3c.forms"""
Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_wizard.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_wizard.py 2009-07-07 12:48:50 UTC (rev 101700)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_wizard.py 2009-07-07 13:27:56 UTC (rev 101701)
@@ -31,81 +31,116 @@
>>> names
('personstep',)
+Render the personStep
+
>>> personStep = obj.publishTraverse(request, names[0])
>>> personStep.update()
- >>> print personStep.render()
+ >>> 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 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 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>
- <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">
- </span>
- </div>
- </div>
- </div>
- </form>
- </div>
+ </div>
+ </form>
+ </div>
+Sending an request but with no data
- >>> #from zope.testbrowser.testing import Browser
- >>> #browser = Browser()
- >>> #browser.addHeader('Authorization', 'Basic mgr:mgrpw')
- >>> #browser.open('http://localhost/++skin++formwizardlayer/person')
- >>> #import pdb; pdb.set_trace()
+ >>> request = TestRequest(form={'form.buttons.next': 'Next'})
+ >>> alsoProvides(request, FormWizardLayer)
+ >>> 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'})
+ >>> alsoProvides(request, FormWizardLayer)
+ >>> 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 grok
More information about the Checkins
mailing list