[Zope-dev] Re: [Checkins] SVN: Zope/branches/2.10/ OFS Image: Image and File now both support simple unicode objects for data (they function the same as strings for data).

Florent Guillaume fg at nuxeo.com
Wed Jun 28 07:56:58 EDT 2006


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
> Checkins at zope.org
> 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   fg at nuxeo.com





More information about the Zope-Dev mailing list