[Checkins] SVN: plone.z3cform/trunk/plone/z3cform/ Update backport to latest z3c.form trunk and add a converter to make sets come out sorted

Martin Aspeli optilude at gmx.net
Thu Mar 12 00:38:43 EDT 2009


Log message for revision 97954:
  Update backport to latest z3c.form trunk and add a converter to make sets come out sorted

Changed:
  U   plone.z3cform/trunk/plone/z3cform/configure.zcml
  U   plone.z3cform/trunk/plone/z3cform/textlines/__init__.py
  U   plone.z3cform/trunk/plone/z3cform/textlines/textlines.py

-=-
Modified: plone.z3cform/trunk/plone/z3cform/configure.zcml
===================================================================
--- plone.z3cform/trunk/plone/z3cform/configure.zcml	2009-03-12 03:36:02 UTC (rev 97953)
+++ plone.z3cform/trunk/plone/z3cform/configure.zcml	2009-03-12 04:38:42 UTC (rev 97954)
@@ -10,9 +10,18 @@
   <include package="z3c.form" file="meta.zcml" />
   <include package="z3c.form" />
 
+  <!-- Backported from z3c.from trunk -->
   <include package=".textlines" file="textlines.zcml"
     zcml:condition="not-installed z3c.form.browser.textlines"/>
 
+  <!-- These are not backported, but represent useful policy -->
+  <adapter
+      factory=".textlines.textlines.TextLinesSetConverter"
+      />
+  <adapter
+      factory=".textlines.textlines.TextLinesFrozenSetConverter"
+      />
+
   <includeOverrides file="overrides.zcml" />
 
   <adapter factory=".traversal.WidgetTraversal" name="widget" />

Modified: plone.z3cform/trunk/plone/z3cform/textlines/__init__.py
===================================================================
--- plone.z3cform/trunk/plone/z3cform/textlines/__init__.py	2009-03-12 03:36:02 UTC (rev 97953)
+++ plone.z3cform/trunk/plone/z3cform/textlines/__init__.py	2009-03-12 04:38:42 UTC (rev 97954)
@@ -0,0 +1 @@
+from plone.z3cform.textlines.textlines import TextLinesFieldWidget
\ No newline at end of file

Modified: plone.z3cform/trunk/plone/z3cform/textlines/textlines.py
===================================================================
--- plone.z3cform/trunk/plone/z3cform/textlines/textlines.py	2009-03-12 03:36:02 UTC (rev 97953)
+++ plone.z3cform/trunk/plone/z3cform/textlines/textlines.py	2009-03-12 04:38:42 UTC (rev 97954)
@@ -54,14 +54,43 @@
         # if the value is the missing value, then an empty list is produced.
         if value is self.field.missing_value:
             return u''
-        return "\n".join(value)
+        return u'\n'.join(unicode(v) for v in value)
 
     def toFieldValue(self, value):
         """See interfaces.IDataConverter"""
         widget = self.widget
         collectionType = self.field._type
+        if isinstance(collectionType, tuple):
+            collectionType = collectionType[-1]
         if not len(value):
             return self.field.missing_value
         valueType = self.field.value_type._type
-        values = [valueType(v) for v in value.split()]
-        return collectionType(values)
\ No newline at end of file
+        if isinstance(valueType, tuple):
+            valueType = valueType[0]
+        return collectionType(valueType(v) for v in value.split())
+
+class TextLinesSetConverter(TextLinesConverter):
+    """Data converter for ITextLinesWidget operating on a set."""
+
+    zope.component.adapts(
+        zope.schema.interfaces.ISet, ITextLinesWidget)
+
+    def toWidgetValue(self, value):
+        """Convert from text lines to HTML representation."""
+        # if the value is the missing value, then an empty list is produced.
+        if value is self.field.missing_value:
+            return u''
+        return u'\n'.join(unicode(v) for v in sorted(value))
+        
+class TextLinesFrozenSetConverter(TextLinesConverter):
+    """Data converter for ITextLinesWidget operating on a frozenset."""
+
+    zope.component.adapts(
+        zope.schema.interfaces.IFrozenSet, ITextLinesWidget)
+
+    def toWidgetValue(self, value):
+        """Convert from text lines to HTML representation."""
+        # if the value is the missing value, then an empty list is produced.
+        if value is self.field.missing_value:
+            return u''
+        return u'\n'.join(unicode(v) for v in sorted(value))
\ No newline at end of file



More information about the Checkins mailing list