[Checkins] SVN: z3c.form/branches/fieldsandcontentproviders/src/z3c/form/contentprovider.py there is no use trying to extract data from content providers

Jean-Francois Roche jfroche at jfroche.be
Thu May 20 10:40:13 EDT 2010


Log message for revision 112578:
  there is no use trying to extract data from content providers

Changed:
  U   z3c.form/branches/fieldsandcontentproviders/src/z3c/form/contentprovider.py

-=-
Modified: z3c.form/branches/fieldsandcontentproviders/src/z3c/form/contentprovider.py
===================================================================
--- z3c.form/branches/fieldsandcontentproviders/src/z3c/form/contentprovider.py	2010-05-20 14:39:28 UTC (rev 112577)
+++ z3c.form/branches/fieldsandcontentproviders/src/z3c/form/contentprovider.py	2010-05-20 14:40:12 UTC (rev 112578)
@@ -2,6 +2,7 @@
 import zope.interface
 import zope.location
 import zope.schema.interfaces
+from z3c.form.error import MultipleErrors
 from zope.contentprovider.interfaces import IContentProvider
 
 from z3c.form.field import FieldWidgets
@@ -53,7 +54,6 @@
 
     def update(self):
         super(FieldWidgetsAndProviders, self).update()
-
         uniqueOrderedKeys = self._data_keys
         for name in self.form.contentProviders:
             factory = self.form.contentProviders[name]
@@ -67,3 +67,47 @@
             # allways ensure that we add all keys and keep the order given from
             # button items
             self._data_keys = uniqueOrderedKeys
+
+    def extract(self):
+        """See interfaces.IWidgets"""
+        data = {}
+        errors = ()
+        for name, widget in self.items():
+            if IContentProvider.providedBy(widget):
+                continue
+            if widget.mode == interfaces.DISPLAY_MODE:
+                continue
+            value = widget.field.missing_value
+            try:
+                widget.setErrors = self.setErrors
+                raw = widget.extract()
+                if raw is not interfaces.NO_VALUE:
+                    value = interfaces.IDataConverter(widget).toFieldValue(raw)
+                zope.component.getMultiAdapter(
+                    (self.content,
+                     self.request,
+                     self.form,
+                     getattr(widget, 'field', None),
+                     widget),
+                    interfaces.IValidator).validate(value)
+            except (zope.interface.Invalid,
+                    ValueError, MultipleErrors), error:
+                view = zope.component.getMultiAdapter(
+                    (error, self.request, widget, widget.field,
+                     self.form, self.content), interfaces.IErrorViewSnippet)
+                view.update()
+                if self.setErrors:
+                    widget.error = view
+                errors += (view,)
+            else:
+                name = widget.__name__
+                data[name] = value
+        for error in self.validate(data):
+            view = zope.component.getMultiAdapter(
+                (error, self.request, None, None, self.form, self.content),
+                interfaces.IErrorViewSnippet)
+            view.update()
+            errors += (view,)
+        if self.setErrors:
+            self.errors = errors
+        return data, errors



More information about the checkins mailing list