[ZOPE] External Method process limits? bug fix!

ruckc ruckc at yahoo.com
Mon Jul 16 21:23:13 EDT 2001


I tried this change, and i still only get a 15 byte Image Object in Zope.

missive at frontiernet.net (Lee Harr) wrote in message news:<9iicpa$9ju$1 at node21.cwnet.roc.gblx.net>...
> 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