[Checkins] SVN: Zope/branches/2.10/ OFS Image: Image and File updated to use isinstance(data, str) and raises TypeError upon encountering unicode objects.

Rocky Burt rocky at serverzen.com
Wed Jun 28 08:43:35 EDT 2006


Log message for revision 68879:
  OFS Image: Image and File updated to use isinstance(data, str) and raises TypeError upon encountering unicode objects.

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:40:37 UTC (rev 68878)
+++ Zope/branches/2.10/doc/CHANGES.txt	2006-06-28 12:43:34 UTC (rev 68879)
@@ -18,8 +18,8 @@
 
     Bugs Fixed
 
-      - OFS Image: Image and File now both support simple unicode objects
-        for data (they function the same as strings for data).
+      - OFS Image: Image and File updated to use isinstance(data, str)
+        and raises TypeError upon encountering unicode objects.
 
       - OFS Application: Updated deprecation warnings.
         Support for '__ac_permissions__' and 'meta_types' will be removed in

Modified: Zope/branches/2.10/lib/python/OFS/Image.py
===================================================================
--- Zope/branches/2.10/lib/python/OFS/Image.py	2006-06-28 11:40:37 UTC (rev 68878)
+++ Zope/branches/2.10/lib/python/OFS/Image.py	2006-06-28 12:43:34 UTC (rev 68879)
@@ -230,7 +230,7 @@
                     RESPONSE.setStatus(206) # Partial content
 
                     data = self.data
-                    if isinstance(data, basestring):
+                    if isinstance(data, str):
                         RESPONSE.write(data[start:end])
                         return True
 
@@ -301,7 +301,7 @@
                             'Content-Range: bytes %d-%d/%d\r\n\r\n' % (
                                 start, end - 1, self.size))
 
-                        if isinstance(data, basestring):
+                        if isinstance(data, str):
                             RESPONSE.write(data[start:end])
 
                         else:
@@ -400,7 +400,7 @@
         self.ZCacheable_set(None)
 
         data=self.data
-        if isinstance(data, basestring):
+        if isinstance(data, str):
             RESPONSE.setBase(None)
             return data
 
@@ -427,6 +427,10 @@
 
     security.declarePrivate('update_data')
     def update_data(self, data, content_type=None, size=None):
+        if isinstance(data, unicode):
+            raise TypeError('Data can only be str or file-like.  '
+                            'Unicode objects are expressly forbidden.')
+
         if content_type is not None: self.content_type=content_type
         if size is None: size=len(data)
         self.size=size
@@ -480,7 +484,7 @@
         if headers and headers.has_key('content-type'):
             content_type=headers['content-type']
         else:
-            if not isinstance(body, basestring): body=body.data
+            if not isinstance(body, str): body=body.data
             content_type, enc=guess_content_type(
                 getattr(file, 'filename',id), body, content_type)
         return content_type
@@ -489,7 +493,7 @@
 
         n=1 << 16
 
-        if isinstance(file, basestring):
+        if isinstance(file, str):
             size=len(file)
             if size < n: return file, size
             # Big string: cut it into smaller chunks
@@ -616,7 +620,7 @@
                 return result
 
         data = self.data
-        if isinstance(data, basestring):
+        if isinstance(data, str):
             RESPONSE.setBase(None)
             return data
 
@@ -776,6 +780,10 @@
 
     security.declarePrivate('update_data')
     def update_data(self, data, content_type=None, size=None):
+        if isinstance(data, unicode):
+            raise TypeError('Data can only be str or file-like.  '
+                            'Unicode objects are expressly forbidden.')
+        
         if size is None: size=len(data)
 
         self.size=size

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:40:37 UTC (rev 68878)
+++ Zope/branches/2.10/lib/python/OFS/tests/testFileAndImage.py	2006-06-28 12:43:34 UTC (rev 68879)
@@ -252,15 +252,12 @@
         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
-        
+    def testUnicode(self):
         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)
         
+        self.assertRaises(TypeError, self.file.manage_edit,
+                          'foobar', 'text/plain', filedata=val)
+        
 class ImageTests(FileTests):
     data = open(filedata, 'rb').read()
     content_type = 'image/gif'



More information about the Checkins mailing list