[Checkins] SVN: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/ Further Changes

Christian Klinger cklinger at novareto.de
Wed Jul 1 10:38:16 EDT 2009


Log message for revision 101367:
  Further Changes

Changed:
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/components.py
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_field.py
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_layout.py
  A   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/utils.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-01 10:22:00 UTC (rev 101366)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/__init__.py	2009-07-01 14:38:16 UTC (rev 101367)
@@ -4,3 +4,5 @@
 from components import WidgetTemplate
 from skin import FormLayer, TableLayer
 from directives import field
+from z3c.form import widget, field, button, action
+from utils import apply_data_event

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/components.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/components.py	2009-07-01 10:22:00 UTC (rev 101366)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/components.py	2009-07-01 14:38:16 UTC (rev 101367)
@@ -67,7 +67,6 @@
         render method in grok), but we have to call the template
         correctly.
         """
-
         if self.template is None:
             self.template = component.getMultiAdapter((self, self.request), IPageTemplate)
         return self._render_template()

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_field.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_field.py	2009-07-01 10:22:00 UTC (rev 101366)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_field.py	2009-07-01 14:38:16 UTC (rev 101367)
@@ -2,24 +2,47 @@
   >>> manfred = Mammoth()
 
   >>> from zope import component
+  >>> from zope.interface import alsoProvides
   >>> from zope.publisher.browser import TestRequest
   >>> request = TestRequest()
+  >>> alsoProvides(request, FormFieldSkin)
 
-  Check that fields have been created on the edition page:
+Check that fields have been created on the edition page:
 
   >>> view = component.getMultiAdapter((manfred, request), name='edit')
   >>> len(view.fields)
   2
   >>> [field.__name__ for field in view.fields.values()]
   ['name', 'age']
-  
+
+Now what happens with the render and call functions?
+
+  >>> #view.render() 
+
+Does the field functions (omit, select, ...) work
+
+  >>> index = component.getMultiAdapter((manfred, request), name='index')
+  >>> len(index.fields)
+  1
+
+  >>> 'name' in index.fields.keys()
+  True
+
 """
 import grok
 
 from zope import interface, schema
 from zope.schema.fieldproperty import FieldProperty
 from megrok import z3cform
+from z3c.form import field
 
+class FormFieldSkin(z3cform.FormLayer):
+    grok.skin('formfieldskin')
+
+grok.layer(FormFieldSkin)
+
+
+
 class IMammoth(interface.Interface):
 
     name = schema.TextLine(title=u"Name")
@@ -36,7 +59,7 @@
     pass
 
 class Index(z3cform.DisplayForm):
-    pass
+    fields = field.Fields(IMammoth).omit('age') 
 
 def test_suite():
     from zope.testing import doctest

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_layout.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_layout.py	2009-07-01 10:22:00 UTC (rev 101366)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_layout.py	2009-07-01 14:38:16 UTC (rev 101367)
@@ -9,7 +9,7 @@
   >>> request = TestRequest()
   >>> alsoProvides(request, FormSkin)
 
-  Check that fields have been created on the edition page:
+Check that fields have been created on the edition page:
 
   >>> view = component.getMultiAdapter((manfred, request), name='edit')
   >>> view
@@ -20,7 +20,7 @@
   >>> '<div class="layout">' in view()
   True
 
-  If we call the render method we get the edit-page without the layout
+If we call the render method we get the edit-page without the layout
 
   >>> view.render().startswith('<form action="http://127.0.0.1"')
   True 
@@ -36,6 +36,62 @@
   >>> view.updateMarker
   True
 
+Now let us try to render the complete edit form
+
+  >>> print view()
+  <html>                                                                           
+  <body>
+    <div class="layout"><form action="http://127.0.0.1" method="post"
+      enctype="multipart/form-data" class="edit-form"
+       name="form" id="form">
+   <div class="viewspace">
+       <div class="required-info">
+          <span class="required">*</span>
+          &ndash; required
+       </div>
+     <div>
+           <div id="form-widgets-name-row" class="row">
+               <div class="label">
+                 <label for="form-widgets-name">
+                   <span>Name</span>
+                   <span class="required">*</span>
+                 </label>
+               </div>
+               <div class="widget">
+     <input id="form-widgets-name" name="form.widgets.name"
+            class="text-widget required textline-field"
+            value="" type="text" />
+  </div>
+           </div>
+           <div id="form-widgets-age-row" class="row">
+               <div class="label">
+                 <label for="form-widgets-age">
+                   <span>Age</span>
+                   <span class="required">*</span>
+                 </label>
+               </div>
+               <div class="widget">
+     <input id="form-widgets-age" name="form.widgets.age"
+            class="text-widget required int-field" value=""
+            type="text" />
+  </div>
+           </div>
+     </div>
+   </div>
+   <div>
+     <div class="buttons">
+  <input id="form-buttons-apply" name="form.buttons.apply"
+        class="submit-widget button-field" value="Apply"
+        type="submit" />
+        </div>
+      </div>
+  </form>
+  </div>
+  </body>
+  </html>
+
+
+
 """
 
 import grok
@@ -75,6 +131,11 @@
         self.updateMarker = True
 
 
+class View(z3cform.PageDisplayForm):
+    fields = field.Fields(IMammoth)
+
+
+
 def test_suite():
     from zope.testing import doctest
     from megrok.z3cform.tests import FunctionalLayer

Added: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/utils.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/utils.py	                        (rev 0)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/utils.py	2009-07-01 14:38:16 UTC (rev 101367)
@@ -0,0 +1,14 @@
+import grok
+import z3c.form
+from zope.lifecycleevent import Attributes
+
+def apply_data_event(form, context, data):
+    """ Updates the object with the data and sends an IObjectModifiedEvent
+    """
+    changes = z3c.form.applyChanges(form, context, data)
+    if changes:
+	descriptions = []
+	for interface, names in changes.items():
+	    descriptions.append(Attributes(interface, *names))
+	grok.notify(grok.ObjectModifiedEvent(context, *descriptions))
+    return changes	



More information about the Checkins mailing list