[Zope] picture as parameter for an external method / thumbnail

VIGNAUX Philippe philippe.vignaux at africamuseum.be
Mon Oct 11 10:33:57 EDT 2004


Hi

You are right Dragos !  Your code is working fine with the read() method
and the picture is well provided to the external method.

Many thanks to you and Tino.



I have now added some extra code in the external method to create a
thumbnail from the picture.  But unfortunately the same
"exceptions.assertionError" happens again  :- ( (

If i'm only leaving the first real code line (getattr), the error already
appear.

Creating a thumbnail seems to be something tricky as another user of zope
community had also somme problems (other errors message) with that matter
this morning...

Any hint ?   Anyway thanks for the help !


def makethumbnail(self, original_id):

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


   # create a thumbnail image file
   original_image=getattr(self, original_id)
   original_file=StringIO(str(original_image.data))
   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 IN MY OWN LOCAL FILE SYSTEM

self.phvfs.manage_addProduct['OFSP'].manage_addImage(thumbnail_id,thumbnai
l_file,'thumbnail image')
   thumbnail_image=getattr(self, thumbnail_id)

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




REGARDS

Ph.


-----Original Message-----
From: Dragos Chirila [mailto:d.chirila at finsiel.ro]
Sent: lundi 11 octobre 2004 17:20
To: zope at zope.org; VIGNAUX Philippe
Subject: Re: [Zope] picture as parameter for an external method

Hi

I just simulate your situation and it works great.

I attached the picture.zexp file that generates a folder with :
	upload_html - page template
	py_test - python script
	my_external_function - external method

The my_external_function.py from extensions contains just:

def my_external_function(self, picture):
      print type(picture)
      print picture

I tested it on Zope 2.5.1 and 2.6.4.

Hope this will help.

Dragos


VIGNAUX Philippe wrote:
> Thanks for your help Tino,
>
>
> 1) For clarity purpose here is the whole page template
>
>
> <html>
> <head>
> <title> Titre </title>
> </head>
> <body>
> <form action="py_test" enctype='multipart/form-data' method='post'>
> <input type="file" name="filename">
> <br><br>
> <input type="submit" name="toto">
> </form>
> </body>
> </html>
>
>
> 2) here is the python script "py_test"
>
> request=context.REQUEST
> context.my_external_function( original_id=request['filename'] )
> #context.my_external_function(
original_id=request.form.get('filename') )
> #context.my_external_function( request['filename'] )
>
> !!nb: the 2 commented lines do not change anything to the error message
> ...
>
>
>
> 3) my_external_function
>
> def my_external_function (self, original_id):
>      pass
>
>
> Of course this external method is supposed to do much more.  I hope to
be
> able to create thumbnail (as an example seen in the zope book).  But i
> have simplified it as much as possible to see where the problem was
> located.  I'm sure i ll have other problems to create the thumbnails ...
> : - )   but the real problem at this time is to pass a picture to the
> exernal method ...
>
>
> Regards
>
> Ph.
>
>
> -----Original Message-----
> From: Tino Wildenhain [mailto:tino at wildenhain.de]
> Sent: lundi 11 octobre 2004 12:53
> To: VIGNAUX Philippe
> Cc: zope at zope.org
> Subject: Re: [Zope] picture as parameter for an external method
>
> On Mon, 2004-10-11 at 11:58, VIGNAUX Philippe wrote:
>
>>Hi !
>>
>>
>>
>>Is there a way to pass a picture (extension JPG)  as a parameter of an
>>external method.
>>It seem to be the case as read on the internet but for me it doesnÿt
>>work !
>>My zope config :  Zope 2.6.4 (binary release, python 2.1, win32-x86),
>>python 2.1.3, win32
>>This is the problem :
>>1) Iÿve got a page template where I can choose a picture thru a
>>« file » object :
>><input type="file" name="filename">
>
>
> Did you adjust enctype accordingly?
>
>
>>2) This page template calls a python scripts
>
>
> Calls? The Template is target of the POST request
> too?
>
>
>>request=context.REQUEST
>>context.my_external_function( original_id=request['filename'] )
>>#context.my_external_function( request['filename'] )
>
>
> if you do it the right way[tm] (see the enctype you can borrow
> from any ZMI HTML source which has a file upload)
> request.form.get('filename') will give you a file object.
> (If you return from form of course)
>
>
>
>>3) my_external_function is defined in an appropiate module in the
>>« Extensions » folder of my zope installation
>>
>>def my_external_function (self, original_id):
>>
>>     pass
>>
>
> This is all?
>
>
>>PROBLEM :   when i run the process i get an error :
>>
>>
>>
>>exceptions.AssertionError
>>
>>Sorry, a site error occurred.
>>
>>Traceback (innermost last):
>>
>>      * Module ZPublisher.Publish, line 150, in publish_module
>>      * Module ZPublisher.Publish, line 106, in publish
>>      * Module Zope.App.startup, line 225, in abort
>>      * Module ZODB.Transaction, line 135, in abort
>>      * Module ZODB.Connection, line 256, in abort
>>
>>When i configure the whole thing to pass a normal parameter (text), it
>>works normally ;  so obviously the problem is when trying to pass a
>>picture.
>>
>
> This might be related to the enctype. Try it first I'd say.
> What is your external method supposed to do?
>
> Regards
> Tino
>
> ###########################################
>
> This message has been scanned by ICT - Africa Museum
>
> _______________________________________________
> Zope maillist  -  Zope at zope.org
> http://mail.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists -
>  http://mail.zope.org/mailman/listinfo/zope-announce
>  http://mail.zope.org/mailman/listinfo/zope-dev )
>


-- 
Dragos Chirila
Programmer, Finsiel ROMANIA
44A, Ficusului St. - 71544 Bucharest
Tel: +40 21 2320193
Fax: +40 21 2329807
URL: http://www.finsiel.ro
Jabber: dragos at jabber.finsiel.ro
###########################################

This message has been scanned by ICT - Africa Museum



More information about the Zope mailing list