I think this is closely connected to an existing Issue 687 (Compute= should 
work always, not once):

http://code.google.com/p/web2py/issues/detail?id=687

Regards

On Monday, June 18, 2012 11:21:57 PM UTC+2, peter wrote:
>
> I would try removing the readable and writeable false for the compute 
> fields. It seems that it does automatically not show them. I found that 
> setting readable and writeable to False means the thumbs only get computed 
> on insert, not update. I reported this a while back. 
> Peter
>
> On Monday, 18 June 2012 22:14:09 UTC+1, Massimo Di Pierro wrote:
>>
>> Will look into this asap. Please open a ticket about it so that it is 
>> tracked.
>>
>>
>> On Monday, 18 June 2012 14:40:30 UTC-5, Brandon Reynolds wrote:
>>>
>>> In a new record a thumbnail is correctly generated from photo. But if I 
>>> didn't upload a photo or want to change the photo the thumbnail doesn't 
>>> generate. So basically a new record works properly but when updating 
>>> nothing in the thumbnail changes at all whether or not is currently has a 
>>> photo in it. 
>>>
>>> ____________________________________________________
>>> model:
>>>
>>> from image import THUMBER
>>> db.define_table('park', 
>>> Field('photo1', 'upload'),
>>> Field('photo_thumb1', 'upload', readable=False, writable=False))
>>>
>>> db.park.photo_thumb1.compute = lambda row: THUMBER(row.photo1, 
>>> "photo_thumb1", 144, 115)
>>>
>>> ____________________________________________________
>>> image.py:
>>>
>>> from gluon import current
>>>  
>>> def THUMBER(image, db_photo_var, nx=120, ny=120, name='thumb'):
>>>     if image:
>>>         try:
>>>             request = current.request
>>>             from PIL import Image
>>>             import os
>>>             img = Image.open(request.folder + 'uploads/' + image)
>>>             img.db_photo_var((nx, ny), Image.ANTIALIAS)
>>>             root, ext = os.path.splitext(image)
>>>             thumb = '%s_%s%s' % (root, name, ext)
>>>             img.save(request.folder + 'uploads/' + thumb)
>>>             return thumb
>>>         except Exception:
>>>             return image
>>>        
>>>
>>>
>>> On Monday, June 18, 2012 1:17:07 PM UTC-6, Massimo Di Pierro wrote:
>>>>
>>>> Let me understand this better.
>>>>
>>>> on insert, the thumbnails are created.
>>>> on update, if you upload a new photo1 is photo_thing1 generated? 
>>>>
>>>> Can you provide a simpler code to reproduce the problem with a just one 
>>>> upload field and one thumbnail field?
>>>>
>>>> massimo
>>>>
>>>>
>>>>
>>>>
>>>> On Monday, 18 June 2012 11:24:05 UTC-5, Brandon Reynolds wrote:
>>>>>
>>>>> I have this problem when i try to generate thumbnails. If the field is 
>>>>> empty it inserts the photo thumb into the thumbnail. But when i try to 
>>>>> update that record the thumbnail doesn't change. 
>>>>>
>>>>> Here is my model:
>>>>>
>>>>> # coding: utf8
>>>>> from image import THUMBER
>>>>>
>>>>> db.define_table('park', 
>>>>> Field('park_name', requires=IS_NOT_EMPTY()),
>>>>> Field('park_city', requires=IS_NOT_EMPTY()),
>>>>> Field('park_state', requires=IS_NOT_EMPTY()),
>>>>> Field('park_address', requires=IS_NOT_EMPTY()),
>>>>> Field('park_zip', requires=IS_NOT_EMPTY()),
>>>>> Field('country', default="USA", notnull=True, readable=False, 
>>>>> writable=False),
>>>>> Field('park_phone', requires=IS_MATCH('[\d\-\(\) ]+')),
>>>>> Field('park_fax', requires=IS_EMPTY_OR(IS_MATCH('[\d\-\(\) ]+'))),
>>>>> Field('park_phone_2', 'string', 
>>>>> requires=IS_EMPTY_OR(IS_MATCH('[\d\-\(\) ]+'))),
>>>>> Field('photo1', 'upload'),
>>>>> Field('photo_thumb1', 'upload', readable=False, writable=False),
>>>>> Field('photo2', 'upload'),
>>>>> Field('photo_thumb2', 'upload', readable=False, writable=False),
>>>>> Field('photo3', 'upload'),
>>>>> Field('photo_thumb3', 'upload', readable=False, writable=False),
>>>>> Field('photo4', 'upload'),
>>>>> Field('photo_thumb4', 'upload', readable=False, writable=False),
>>>>> Field('photo5', 'upload'),
>>>>> Field('photo_thumb5', 'upload', readable=False, writable=False),
>>>>> Field('manager', requires=IS_NOT_EMPTY()),
>>>>> Field('manager_email', requires=IS_EMAIL()),
>>>>> Field('spaces', 'integer', requires=IS_NOT_EMPTY()),
>>>>> Field('vacant', 'integer'),
>>>>> Field('lot_rent', 'integer', requires=IS_NOT_EMPTY()),
>>>>> Field('water', 'boolean'),
>>>>> Field('sewer', 'boolean'),
>>>>> Field('trash', 'boolean'),
>>>>> Field('pool', 'boolean'),
>>>>> Field('playground', 'boolean'),
>>>>> Field('clubhouse', 'boolean'),
>>>>> Field('laundromat', 'boolean'),
>>>>> Field('rv_spaces', 'boolean'),
>>>>> Field('storage', 'boolean'),
>>>>> Field('handicap_accessible', 'boolean'),
>>>>> Field('community_description', 'text'),
>>>>> format='%(park_name)s')
>>>>>
>>>>> db.define_table('home', 
>>>>> Field('pid', notnull=True, readable=False, writable=False),
>>>>> Field('lot'),
>>>>> Field('year', length=4, requires=IS_NOT_EMPTY()),
>>>>> Field('make'),
>>>>> Field('model'),
>>>>> Field('width', requires=IS_NOT_EMPTY()),
>>>>> Field('length', requires=IS_NOT_EMPTY()),
>>>>> Field('wide', requires=IS_NOT_EMPTY()),
>>>>> Field('for_sale', 'boolean', default=True),
>>>>> Field('beds', requires=IS_NOT_EMPTY()),
>>>>> Field('baths', requires=IS_NOT_EMPTY()),
>>>>> Field('fridge', 'boolean'),
>>>>> Field('stove', 'boolean'),
>>>>> Field('dishwasher', 'boolean'),
>>>>> Field('microwave', 'boolean'),
>>>>> Field('washer', 'boolean'),
>>>>> Field('dryer', 'boolean'),
>>>>> Field('photo1', 'upload'),
>>>>> Field('photo1_text'),
>>>>> Field('photo_thumb1', 'upload', readable=False, writable=False),
>>>>> Field('photo2', 'upload'),
>>>>> Field('photo2_text'),
>>>>> Field('photo_thumb2', 'upload', readable=False, writable=False),
>>>>> Field('photo3', 'upload'),
>>>>> Field('photo3_text'),
>>>>> Field('photo_thumb3', 'upload', readable=False, writable=False),
>>>>> Field('photo4', 'upload'),
>>>>> Field('photo4_text'),
>>>>> Field('photo_thumb4', 'upload', readable=False, writable=False),
>>>>> Field('photo5', 'upload'),
>>>>> Field('photo5_text'),
>>>>> Field('photo_thumb5', 'upload', readable=False, writable=False),
>>>>> Field('price',requires=IS_NOT_EMPTY()),
>>>>> Field('description', 'text', requires=IS_NOT_EMPTY()),
>>>>> Field('posted_on', 'datetime', readable=False, writable=False))
>>>>>
>>>>> db.define_table('state',
>>>>> Field('name'),
>>>>> Field('full_name'))
>>>>>
>>>>> db.define_table('wide',
>>>>> Field('type'),
>>>>> format='%(type)s')
>>>>>
>>>>>
>>>>> db.park.park_state.requires = IS_IN_DB(db, 'state.name', 
>>>>> '%(full_name)s (%(name)s)', zero=T('Select State'))
>>>>> db.home.wide.requires = IS_IN_DB(db, 'wide.type', '%(type)s', 
>>>>> zero=T('Select Home Type'))
>>>>>
>>>>> db.park.photo_thumb1.compute = lambda row: THUMBER(row.photo1, 
>>>>> "photo_thumb1", 144, 115)
>>>>> db.park.photo_thumb2.compute = lambda row: THUMBER(row.photo2, 
>>>>> "photo_thumb2", 144, 115)
>>>>> db.park.photo_thumb3.compute = lambda row: THUMBER(row.photo3, 
>>>>> "photo_thumb3", 144, 115)
>>>>> db.park.photo_thumb4.compute = lambda row: THUMBER(row.photo4, 
>>>>> "photo_thumb4", 144, 115)
>>>>> db.park.photo_thumb5.compute = lambda row: THUMBER(row.photo5, 
>>>>> "photo_thumb5", 144, 115)
>>>>> db.home.photo_thumb1.compute = lambda row: THUMBER(row.photo1, 
>>>>> "photo_thumb1", 144, 115)
>>>>> db.home.photo_thumb2.compute = lambda row: THUMBER(row.photo2, 
>>>>> "photo_thumb2", 144, 115)
>>>>> db.home.photo_thumb3.compute = lambda row: THUMBER(row.photo3, 
>>>>> "photo_thumb3", 144, 115)
>>>>> db.home.photo_thumb4.compute = lambda row: THUMBER(row.photo4, 
>>>>> "photo_thumb4", 144, 115)
>>>>> db.home.photo_thumb5.compute = lambda row: THUMBER(row.photo5, 
>>>>> "photo_thumb5", 144, 115)
>>>>>
>>>>>
>>>>> Here is my controller:
>>>>>
>>>>> def index():
>>>>>     return locals()
>>>>>     
>>>>> def parks():
>>>>>     if request.args(0):
>>>>>         parks = 
>>>>> db(db.park.park_state==request.args(0)).select(orderby=db.park.park_city|db.park.park_name)
>>>>>     else:
>>>>>         parks = 
>>>>> db(db.park).select(orderby=db.park.park_state|db.park.park_city|db.park.park_name)
>>>>>     return locals()
>>>>>     
>>>>> def park():
>>>>>     park = db.park(request.args(0)) or redirect(URL('parks'))
>>>>>     homes = db(db.home.pid==(request.args(0))).select(orderby=
>>>>> db.home.id)
>>>>>     return locals()
>>>>>     
>>>>> def home():
>>>>>     home = db.home(request.args(0)) or redirect(URL('parks'))
>>>>>     park = db.park(home.pid)
>>>>>     return locals()
>>>>>     
>>>>> def home_feed():
>>>>>     home = db(db.home).select(orderby=db.home.id)
>>>>>     return locals()
>>>>>
>>>>> @auth.requires_membership('Admin')
>>>>> def new_park():
>>>>>     form = crud.create(db.park, next='park/[id]')
>>>>>     return locals()
>>>>>     
>>>>> @auth.requires_membership('Admin')
>>>>> def new_home():
>>>>>     db.home.pid.default = request.args(0) or redirect(URL('parks'))
>>>>>     db.home.price.default = "$0000.00"
>>>>>     db.home.posted_on.default = request.now
>>>>>     form = crud.create(db.home, next='home/[id]')
>>>>>     return locals()
>>>>>     
>>>>> @auth.requires_membership('Admin')
>>>>> def edit_park():
>>>>>     park = db.park(request.args(0)) or redirect(URL('parks'))
>>>>>     form = crud.update(db.park, park, next='park/[id]')
>>>>>     return locals()
>>>>>     
>>>>>     
>>>>> @auth.requires_membership('Admin')
>>>>> def edit_home():
>>>>>     home = db.home(request.args(0)) or redirect(URL('parks'))
>>>>>     form = crud.update(db.home, home, next='home/[id]')
>>>>>     return locals()
>>>>>     
>>>>> def about_us():
>>>>>     return locals()
>>>>>     
>>>>> def employment_opportunities():
>>>>>     return locals()
>>>>>
>>>>> def park_management():
>>>>>     return locals()
>>>>>     
>>>>> def make_park_thumbs():
>>>>> from image import THUMBER
>>>>> parks=db(db.park).select(orderby=db.park.park_state)
>>>>> for park in parks:
>>>>> park.update_record(photo_thumb1 = THUMBER(park.photo1, "photo_thumb1", 
>>>>> 144, 115))
>>>>> park.update_record(photo_thumb2 = THUMBER(park.photo2, "photo_thumb2", 
>>>>> 144, 115))
>>>>> park.update_record(photo_thumb3 = THUMBER(park.photo3, "photo_thumb3", 
>>>>> 144, 115))
>>>>> park.update_record(photo_thumb4 = THUMBER(park.photo4, "photo_thumb4", 
>>>>> 144, 115))
>>>>> park.update_record(photo_thumb5 = THUMBER(park.photo5, "photo_thumb5", 
>>>>> 144, 115))
>>>>> db.commit()
>>>>>
>>>>>
>>>>> Here is the THUMBER function
>>>>> from gluon import current
>>>>>  
>>>>> def THUMBER(image, db_photo_var, nx=120, ny=120, name='thumb'):
>>>>>     if image:
>>>>>         try:
>>>>>             request = current.request
>>>>>             from PIL import Image
>>>>>             import os
>>>>>             img = Image.open(request.folder + 'uploads/' + image)
>>>>>             img.db_photo_var((nx, ny), Image.ANTIALIAS)
>>>>>             root, ext = os.path.splitext(image)
>>>>>             thumb = '%s_%s%s' % (root, name, ext)
>>>>>             img.save(request.folder + 'uploads/' + thumb)
>>>>>             return thumb
>>>>>         except Exception:
>>>>>             return image
>>>>>        
>>>>>
>>>>> What should i do to get these working on update? At the bottom of the 
>>>>> controller you will notice a the make_park_thumbs() function. That was 
>>>>> one 
>>>>> way of try to fix this and having it set to run on updates. However won't 
>>>>> generate a thumbnail it just returns the original photo. This would work 
>>>>> if 
>>>>> you can tell why that function won't work. Let me know what to do.
>>>>>
>>>>> Braandon
>>>>>
>>>>

Reply via email to