[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/formlib/schema. - FileUpload and Choice both have _type==None but require different handling

Yvo Schubbe y.2008 at wcm-solutions.de
Fri May 23 04:09:37 EDT 2008


Log message for revision 86913:
  - FileUpload and Choice both have _type==None but require different handling

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/formlib/schema.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/formlib/schema.txt

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/formlib/schema.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/formlib/schema.py	2008-05-23 03:13:14 UTC (rev 86912)
+++ Products.CMFDefault/trunk/Products/CMFDefault/formlib/schema.py	2008-05-23 08:09:35 UTC (rev 86913)
@@ -76,8 +76,10 @@
         elif callable(attribute):
             attribute = attribute()
 
-        if self._field._type in (str, None):
+        if self._field._type == str:
             return attribute
+        if isinstance(self._field, FileUpload):
+            return attribute
         if isinstance(attribute, str) and inst.encoding:
             return attribute.decode(inst.encoding)
         if isinstance(attribute, DateTime):

Modified: Products.CMFDefault/trunk/Products/CMFDefault/formlib/schema.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/formlib/schema.txt	2008-05-23 03:13:14 UTC (rev 86912)
+++ Products.CMFDefault/trunk/Products/CMFDefault/formlib/schema.txt	2008-05-23 08:09:35 UTC (rev 86913)
@@ -10,6 +10,8 @@
       ...     _properties=({'id':'foo_prop', 'type': 'string'},)
       ...     foo_text = ''
       ...     foo_bytes = ''
+      ...     foo_upload = ''
+      ...     foo_choice = ''
       ...     foo_datetime = None
       ...     foo_set = ()
       ...     foo_list = []
@@ -18,9 +20,12 @@
 
       >>> from zope.interface import Interface
       >>> from zope import schema
+      >>> from Products.CMFDefault.formlib.schema import FileUpload
       >>> class IFooContentView(Interface):
       ...     foo_text = schema.Text()
       ...     foo_bytes = schema.Bytes()
+      ...     foo_upload = FileUpload()
+      ...     foo_choice = schema.Choice(values=(u'f\xf6\xf6', u'bar'))
       ...     foo_datetime = schema.Datetime()
       ...     foo_set = schema.Set()
       ...     foo_list = schema.List()
@@ -32,6 +37,8 @@
       ... 
       ...     foo_text = ProxyFieldProperty(IFooContentView['foo_text'])
       ...     foo_bytes = ProxyFieldProperty(IFooContentView['foo_bytes'])
+      ...     foo_upload = ProxyFieldProperty(IFooContentView['foo_upload'])
+      ...     foo_choice = ProxyFieldProperty(IFooContentView['foo_choice'])
       ...     foo_datetime = ProxyFieldProperty(IFooContentView['foo_datetime'])
       ...     foo_set = ProxyFieldProperty(IFooContentView['foo_set'])
       ...     foo_list = ProxyFieldProperty(IFooContentView['foo_list'])
@@ -54,6 +61,29 @@
       >>> adapter.foo_text == foo_text
       True
 
+      >>> foo_choice = u'f\xf6\xf6'
+      >>> adapter.foo_choice = foo_choice
+      >>> content.foo_choice
+      'f\xc3\xb6\xc3\xb6'
+      >>> adapter.foo_choice == foo_choice
+      True
+
+    bytes are not changed::
+
+      >>> foo_bytes = 'f\xc3\xb6\xc3\xb6'
+      >>> adapter.foo_bytes = foo_bytes
+      >>> content.foo_bytes
+      'f\xc3\xb6\xc3\xb6'
+      >>> adapter.foo_bytes == foo_bytes
+      True
+
+      >>> foo_upload = 'f\xc3\xb6\xc3\xb6'
+      >>> adapter.foo_upload = foo_upload
+      >>> content.foo_upload
+      'f\xc3\xb6\xc3\xb6'
+      >>> adapter.foo_upload == foo_upload
+      True
+
     Pdata is read as str::
 
       >>> from OFS.Image import Pdata



More information about the Checkins mailing list