I have spend a long time on this and haven't come up with a fix. My script is back to the original but oddly enough not the new record thumbnails aren't generating either. I had the files when they were working saved elsewhere and just put them back in. Now thumbnails aren't generating at all. Does anyone know of a way to generate thumbnails easily without the compute function? Does web2py have a built in tool that i missed? Maybe would be a good feature to add on like inside an "IS_THUMB(size)" function.
Thanks for all the help, Brandon On Tuesday, June 19, 2012 9:59:15 AM UTC-6, Massimo Di Pierro wrote: > > Basically the function _listify is called by both inser and update. It > figures out which fields are missing and gets their default, update or > computed value. Looks like it is not calling compute. It has three loops: > > for name in fields: > ... > for ofield in self: > ... > for ofield in self: > if not ofield.name in new_fields_names and ofield.compute: > ... > Can you figure out why the "if not ofield.name in new_fields_names and > ofield.compute" is false for your field? > > > On Tuesday, 19 June 2012 10:43:59 UTC-5, Brandon Reynolds wrote: >> >> Peter, >> >> I tried your fix with no luck. It did not work unfortunately. >> >> Massimo, >> >> I replaced the lines you specified with no luck. It never printed out >> computing. What should we try to next to debug this? >> >> Brandon >> >> On Tuesday, June 19, 2012 8:28:20 AM UTC-6, Massimo Di Pierro wrote: >>> >>> I need your help debugging this. In dal.py there are these lines: >>> >>> def _listify(self,fields,update=False): >>> for ofield in self: >>> if not ofield.name in new_fields_names and ofield.compute: >>> try: >>> >>> new_fields.append((ofield,ofield.compute(Row(fields)))) >>> except KeyError: >>> pass >>> >>> The line new_fields.append((ofield,ofield.compute(Row(fields)))) should >>> always be called (insert and update). Can you try remove the try... >>> except.. >>> >>> def _listify(self,fields,update=False): >>> for ofield in self: >>> if not ofield.name in new_fields_names and ofield.compute: >>> #try: >>> print 'computing',ofield.name >>> >>> new_fields.append((ofield,ofield.compute(Row(fields)))) >>> #except KeyError: >>> # pass >>> >>> and see what you get? >>> >>> >>> On Tuesday, 19 June 2012 08:35:19 UTC-5, LightDot wrote: >>>> >>>> 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 >>>>>>>>> >>>>>>>>

