Has this change been discussed?
I don't agree with it. Unicode strings aren't byte strings. File and Image should only work with byte strings. Code dealing with them should always know and assume that they use str. Anything using unicode with them is broken or has done insufficient input validation.

Please revert, unless you can convince me otherwise.

Florent

On 28 Jun 2006, at 13:24, Rocky Burt wrote:

Log message for revision 68876:
OFS Image: Image and File now both support simple unicode objects for data (they function the same as strings for data).

Changed:
  U   Zope/branches/2.10/doc/CHANGES.txt
  U   Zope/branches/2.10/lib/python/OFS/Image.py
  U   Zope/branches/2.10/lib/python/OFS/tests/testFileAndImage.py

-=-
Modified: Zope/branches/2.10/doc/CHANGES.txt
===================================================================
--- Zope/branches/2.10/doc/CHANGES.txt 2006-06-28 11:20:16 UTC (rev 68875) +++ Zope/branches/2.10/doc/CHANGES.txt 2006-06-28 11:24:05 UTC (rev 68876)
@@ -18,6 +18,9 @@

     Bugs Fixed

+ - OFS Image: Image and File now both support simple unicode objects
+        for data (they function the same as strings for data).
+
       - OFS Application: Updated deprecation warnings.
Support for '__ac_permissions__' and 'meta_types' will be removed in
         Zope 2.11, 'methods' support might remain longer.

Modified: Zope/branches/2.10/lib/python/OFS/Image.py
===================================================================
--- Zope/branches/2.10/lib/python/OFS/Image.py 2006-06-28 11:20:16 UTC (rev 68875) +++ Zope/branches/2.10/lib/python/OFS/Image.py 2006-06-28 11:24:05 UTC (rev 68876)
@@ -43,7 +43,6 @@
 from cgi import escape
 import transaction

-StringType=type('')
manage_addFileForm=DTMLFile('dtml/imageAdd', globals (),Kind='File',kind='file') def manage_addFile(self,id,file='',title='',precondition='', content_type='',
                    REQUEST=None):
@@ -231,7 +230,7 @@
                     RESPONSE.setStatus(206) # Partial content

                     data = self.data
-                    if type(data) is StringType:
+                    if isinstance(data, basestring):
                         RESPONSE.write(data[start:end])
                         return True

@@ -302,7 +301,7 @@
'Content-Range: bytes %d-%d/%d\r\n\r \n' % (
                                 start, end - 1, self.size))

-                        if type(data) is StringType:
+                        if isinstance(data, basestring):
                             RESPONSE.write(data[start:end])

                         else:
@@ -401,7 +400,7 @@
         self.ZCacheable_set(None)

         data=self.data
-        if type(data) is type(''):
+        if isinstance(data, basestring):
             RESPONSE.setBase(None)
             return data

@@ -481,7 +480,7 @@
         if headers and headers.has_key('content-type'):
             content_type=headers['content-type']
         else:
-            if type(body) is not type(''): body=body.data
+            if not isinstance(body, basestring): body=body.data
             content_type, enc=guess_content_type(
                 getattr(file, 'filename',id), body, content_type)
         return content_type
@@ -490,7 +489,7 @@

         n=1 << 16

-        if type(file) is StringType:
+        if isinstance(file, basestring):
             size=len(file)
             if size < n: return file, size
             # Big string: cut it into smaller chunks
@@ -617,7 +616,7 @@
                 return result

         data = self.data
-        if type(data) is type(''):
+        if isinstance(data, basestring):
             RESPONSE.setBase(None)
             return data


Modified: Zope/branches/2.10/lib/python/OFS/tests/testFileAndImage.py
===================================================================
--- Zope/branches/2.10/lib/python/OFS/tests/testFileAndImage.py 2006-06-28 11:20:16 UTC (rev 68875) +++ Zope/branches/2.10/lib/python/OFS/tests/testFileAndImage.py 2006-06-28 11:24:05 UTC (rev 68876)
@@ -252,7 +252,15 @@
         verifyClass(HTTPRangeInterface, File)
         verifyClass(WriteLockInterface, File)

-
+    def testUnicodeWithIndexHtml(self):
+        # Introduced to help test the fact that Image.py has been
+ # changed to be lenient towards any basestring type, not just str
+
+        val = u'some unicode string here'
+        self.file.manage_edit('foobar', 'text/plain', filedata=val)
+ s = self.file.index_html(self.app.REQUEST, self.app.REQUEST.RESPONSE)
+        self.assertEquals(s, val)
+
 class ImageTests(FileTests):
     data = open(filedata, 'rb').read()
     content_type = 'image/gif'
@@ -285,7 +293,6 @@

         verifyClass(WriteLockInterface, Image)

-
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(FileTests),

_______________________________________________
Checkins mailing list
[EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/checkins

--
Florent Guillaume, Nuxeo (Paris, France)   Director of R&D
+33 1 40 33 71 59   http://nuxeo.com   [EMAIL PROTECTED]



_______________________________________________
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )

Reply via email to