[Checkins] SVN: megrok.z3cform.wizard/trunk/ upgrading to new grok version

Christian Klinger cklinger at novareto.de
Wed Mar 17 17:43:25 EDT 2010


Log message for revision 110039:
  upgrading to new grok version

Changed:
  U   megrok.z3cform.wizard/trunk/buildout.cfg
  U   megrok.z3cform.wizard/trunk/setup.py
  U   megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/__init__.py
  U   megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/components.py
  A   megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_layout_wizard.py
  D   megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_layout_wizard_templates/
  U   megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_wizard.py

-=-
Modified: megrok.z3cform.wizard/trunk/buildout.cfg
===================================================================
--- megrok.z3cform.wizard/trunk/buildout.cfg	2010-03-17 21:39:09 UTC (rev 110038)
+++ megrok.z3cform.wizard/trunk/buildout.cfg	2010-03-17 21:43:25 UTC (rev 110039)
@@ -1,20 +1,10 @@
 [buildout]
 develop = .
-parts = sources test
-extends = versions.cfg
+parts = test
+extends = http://grok.zope.org/releaseinfo/grok-1.1rc1.cfg 
 versions = versions
 newest = false
 
-[versions]
-z3c.pagelet = 1.0.3
-zope.container = 3.8.1
-
-[sources]
-recipe=infrae.subversion
-urls = svn://svn.zope.org/repos/main/megrok.z3cform.base/trunk megrok.z3cform.base
-as_eggs=True
-
-
 [test]
 recipe = zc.recipe.testrunner
 eggs = 

Modified: megrok.z3cform.wizard/trunk/setup.py
===================================================================
--- megrok.z3cform.wizard/trunk/setup.py	2010-03-17 21:39:09 UTC (rev 110038)
+++ megrok.z3cform.wizard/trunk/setup.py	2010-03-17 21:43:25 UTC (rev 110039)
@@ -30,6 +30,7 @@
           'grok',
 	  'megrok.z3cform.base',
           'megrok.pagetemplate',
+          'zope.app.testing',
       ],
       entry_points="""
       # -*- Entry points: -*-

Modified: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/__init__.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/__init__.py	2010-03-17 21:39:09 UTC (rev 110038)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/__init__.py	2010-03-17 21:43:25 UTC (rev 110039)
@@ -1,2 +1,2 @@
 from z3c.wizard.interfaces import IWizard
-from components import WizardForm, Step, LayoutStep
+from components import WizardForm, Step, PageStep

Modified: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/components.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/components.py	2010-03-17 21:39:09 UTC (rev 110038)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/components.py	2010-03-17 21:43:25 UTC (rev 110039)
@@ -7,6 +7,7 @@
 from z3c.wizard import wizard, step
 from megrok.z3cform.base import PageForm, Form
 from zope.publisher.publish import mapply
+from megrok.layout import Page
 
 class WizardForm(Form, wizard.Wizard, grokcore.view.View):
     """Base Class for a z3c.wizdard.
@@ -32,24 +33,17 @@
         return self.render()
 
 
-class LayoutStep(BaseStep):
+class PageStep(Page, BaseStep):
     """A Step for the Witzard
     """
+   
+    def __init__(self, context, request, wizard):
+        self.context = context
+        self.request = request
+        self.wizard = self.__parent__ = wizard
 
-    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 update(self):
+        BaseStep.update(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.request, self.context), megrok.layout.ILayout)
-            return layout(self)
-        return self.layout()
+    def render(self):
+        return BaseStep.render(self)

Added: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_layout_wizard.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_layout_wizard.py	                        (rev 0)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_layout_wizard.py	2010-03-17 21:43:25 UTC (rev 110039)
@@ -0,0 +1,220 @@
+"""
+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() 
+
+  >>> root['person1'] = person1 = Person()
+  >>> person1.__parent__ = root
+  >>> person1.__name__ = u'person'
+
+  >>> from zope.component import getMultiAdapter
+  >>> pw = getMultiAdapter((person1, request), name=u"personwizardlayout")
+  >>> pw
+  <PersonWizardLayout 'personwizardlayout'>
+
+  >>> obj, names = pw.browserDefault(request)
+  >>> obj
+  <PersonWizardLayout 'personwizardlayout'>
+
+  >>> names
+  ('person1step',)
+
+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>Person1</span>
+        </span>
+        <span>
+            <a href="http://127.0.0.1/person/personwizardlayout/address1step">Address1</a>
+        </span>
+      </div>
+    <form action="http://127.0.0.1" method="post"
+          enctype="multipart/form-data" class="edit-form"
+          name="form" id="form">
+        <fieldset class="main">
+        <div class="viewspace">
+            <div class="label">Person1</div>
+            <div class="required-info">
+              <span class="required">*</span>&ndash; 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>
+        </fieldset>
+    </form>
+  </div>
+
+
+Sending an request but with no data
+
+  >>> request = TestRequest(form={'form.buttons.next': 'Next'})
+  >>> personWizard = PersonWizardLayout(person1, request)
+  >>> personWizard.__parent__ = person1
+  >>> 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 = PersonWizardLayout(person1, request)
+  >>> personWizard.__parent__ = person1
+  >>> 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/address1step
+
+"""
+
+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
+from megrok.layout import Layout
+
+
+class MyLayout(Layout):
+    grok.context(zope.interface.Interface)
+
+    def render(self):
+        return "<html> %s </html>" % self.view.contentn()
+
+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 PersonWizardLayout(z3cwizard.WizardForm):
+    """ Wizard form."""
+    grok.implements(IPersonWizard)
+    grok.context(Person)
+
+    label = u'Person Wizard'
+
+    def setUpSteps(self):
+        return [
+            step.addStep(self, 'person1step', weight=1),
+            step.addStep(self, 'address1step', weight=2),
+            ]
+
+
+class Person1Step(z3cwizard.PageStep):
+    grok.context(PersonWizardLayout)
+    label = u'Person1'
+    fields = field.Fields(IPerson).select('firstName', 'lastName')
+
+
+class Address1Step(z3cwizard.PageStep):
+    grok.context(PersonWizardLayout)
+    label = u'Address1'
+    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
+

Modified: megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_wizard.py
===================================================================
--- megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_wizard.py	2010-03-17 21:39:09 UTC (rev 110038)
+++ megrok.z3cform.wizard/trunk/src/megrok/z3cform/wizard/tests/test_wizard.py	2010-03-17 21:43:25 UTC (rev 110039)
@@ -48,12 +48,12 @@
       </div>
     <form action="http://127.0.0.1" method="post"
           enctype="multipart/form-data" class="edit-form"
-          id="form">
+          name="form" id="form">
+        <fieldset class="main">
         <div class="viewspace">
             <div class="label">Person</div>
             <div class="required-info">
-               <span class="required">*</span>
-               &ndash; required
+              <span class="required">*</span>&ndash; required
             </div>
           <div class="step">
             <div id="form-widgets-firstName-row" class="row">
@@ -68,7 +68,7 @@
              name="form.widgets.firstName"
              class="text-widget required textline-field"
              value="" type="text" />
-    </div>
+  </div>
             </div>
             <div id="form-widgets-lastName-row" class="row">
                 <div class="label">
@@ -82,7 +82,7 @@
              name="form.widgets.lastName"
              class="text-widget required textline-field"
              value="" type="text" />
-    </div>
+  </div>
             </div>
           </div>
             <div>
@@ -102,6 +102,7 @@
               </div>
             </div>
         </div>
+        </fieldset>
     </form>
   </div>
 



More information about the checkins mailing list