[ZOPE] External Method process limits? bug fix!

Lee Harr missive at frontiernet.net
Wed Jul 11 16:26:19 EDT 2001


Hi:

Thanks for your help. I finally broke down and joined the zope mailing list.
It was not so difficult, really, just fill out the form at:

http://lists.zope.org/mailman/listinfo/zope

and reply to the confirmation message that goes out to you.


Turns out there is a bug in the PIL External Method example in the Zope
Book. Once the image.data attribute gets to a certain size, it is no
longer pushed around as a string, but gets wrapped up in its own 
different kind of object. PIL or cStringIO was objecting to that.

The fix is to wrap image.data in str() to force stringiness.
Here is the corrected code...

(mostly from http://www.zope.org/Members/michel/ZB/ScriptingZope.dtml)


def makeThumbnail(self, original_id, size=128):
          """
          Makes a thumbnail image given an image Id when called on a Zope
          folder.

          The thumbnail is a Zope image object that is a small JPG
          representation of the original image. The thumbnail has a
          'original_id' property set to the id of the full size image
          object.
          """

          from PIL import Image
          from cStringIO import StringIO
          import os.path

          # create a thumbnail image file
          original_image=getattr(self, original_id)
          original_file=StringIO(str(original_image.data)) # bug fix here
          image=Image.open(original_file)
          image=image.convert('RGB')
          image.thumbnail((size,size))
          thumbnail_file=StringIO()
          image.save(thumbnail_file, "JPEG") 
          thumbnail_file.seek(0)

          # create an id for the thumbnail
          path, ext=os.path.splitext(original_id)
          thumbnail_id=path + '.thumb.jpg'

          # if there's and old thumbnail, delete it
          if thumbnail_id in self.objectIds():
              self.manage_delObjects(thumbnail_id)

          # create the Zope image object
          self.manage_addProduct['OFSP'].manage_addImage(thumbnail_id,
                                                         thumbnail_file,
                                                         'thumbnail image')
          thumbnail_image=getattr(self, thumbnail_id)

          # set the 'originial_id' property
          thumbnail_image.manage_addProperty('original_id',
                                                original_id,
                                                     'string')






More information about the Python-list mailing list