If you look at issue 822 you will see an example of a thumb that works on update. As the comments say, you have to not set writeable to false for the thumb. If you do set writeable to false then compute only works on add not edit or update. So my experience is that compute for images to create a thumb does work on update. Peter
On Thursday, August 9, 2012 5:04:28 PM UTC+1, Brandon Reynolds wrote: > > Has anyone found a way to fix this yet? Or is there a thumbnail module out > now? Like django's http://djangothumbnails.com/ > > Brandon > > > On Monday, June 18, 2012 10:24:05 AM UTC-6, 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 >> > --