I have attached the reservations section from my model. Also the relevant section of the controller script - a number of validators are set up at run time. The failure case is the crud.update() in the middle of the function, modifying an existing reservation. There are no custom widgets involved.
Note that the exact same application running on the same (production) database on GAE using 2.4.6 works fine. The same appliction running on 2.7.4 in my development environment also works fine, though the database there is an older snapshot of the production database, which is what leads me to think the problem is with GAE specific logic in the DAL? Thanks! David On Tuesday, October 29, 2013 2:58:50 PM UTC-4, Massimo Di Pierro wrote: > > Can you show us the db.Reservations definition and in particular its > widgets and validators. > there seems to be an invalid query in a IS_IN_DB somewhere. > > On Tuesday, 29 October 2013 08:28:06 UTC-5, David Manns wrote: >> >> I have been running my application on GAE using Python 2.7 and web2py >> 2.4.6. >> >> Recently made minor application change and deployed with web2py 2.7.4, >> the current version. I am getting an error in at least one part of the >> application. The GAE log is attached. >> >> Re-deployed with the same application but web2py 2.4.6 and all is working. >> >> Application uses the datastore (nosql) >> >> Failure occurs in this statement: >> >> form = crud.update(db.Reservations, request.vars.resvid, >> deletable = True, onvalidation=setmodified, >> ondelete=delreservation, >> onaccept=modreservation) >> >> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
#table includes primary reservation records plus guest records for each guest. #Member(host) must have record in Members. #Guests can be anonymous. Primary reservation record has Host==True db.define_table('Reservations', Field('Member', 'reference Members', writable=False, ondelete='CASCADE'), Field('Event', 'reference Events', writable=False, ondelete='CASCADE'), Field('Host', 'boolean', default=True, writable=False, readable=False), Field('Title', 'string', default='', writable=False, readable=False), Field('Firstname', 'string', default='', writable=False, readable=False), Field('Lastname', 'string', default='', writable=False, readable=False), Field('Suffix', 'string', default='', writable=False, readable=False), Field('Affiliation', 'reference Colleges', writable=True, default=None, #primary affiliation requires=IS_EMPTY_OR(IS_IN_DB(db, db.Colleges.id, '%(Name)s', orderby=db.Colleges.Name))), Field('Menuchoice', 'string', default='n/a'), Field('Notes', 'string', default=''), Field('Unitcost', 'decimal(5,2)'), Field('Waitlist', 'boolean', default=False), #only meaningfull in primary reservation Field('NonOCS', 'boolean', writable=False, readable=False), #ditto Field('Totalcost', 'decimal(6,2)', default=0, writable=False), #ditto Field('Partysize', 'integer', default=1, writable=False), #ditto Field('Created', 'datetime', default=request.now, readable=False, writable=False), Field('Modified', 'datetime', default=request.now, writable=False)) db.Reservations.Event.requires=IS_IN_DB(db, db.Events.id, '%(Event)s', orderby=~db.Events.Date) class Resvname(object): def namestr(self): name = self.Reservations.Lastname + ', ' if self.Reservations.Title!='': name = name + self.Reservations.Title + ' ' name = name + self.Reservations.Firstname if self.Reservations.Suffix!='': name = name + ' ' + self.Reservations.Suffix return name db.Reservations.virtualfields.append(Resvname())
def reservationform(): chkurlreader() db.Reservations.Unitcost.comment = "set value to override, e.g. '0' for comps" db.Reservations.Notes.comment='Please note whether PayPal or check' db.Reservations.NonOCS.label="NonOCS" if request.vars.resvid and request.vars.resvid != 'None': db.Reservations.Event.writable = False db.Reservations.Title.writable = False reservation = db.Reservations[request.vars.resvid] member = db.Members[reservation.Member] event = db.Events[reservation.Event] session.membid=reservation.Member session.eventid=reservation.Event formpg = None prevguests=db(db.Reservations.Member==reservation.Member).select() prevguests = prevguests.find(lambda r: r.Host==False) prevguests=prevguests.sort(lambda r: r.Lastname+r.Firstname) thisguests=prevguests.find(lambda r: r.Event==reservation.Event) for g in thisguests: prevguests=prevguests.find(lambda r: r.namestr!=g.namestr) if len(prevguests)>0: pgoptions=[] pgnames=[] for g in prevguests: if g.namestr not in pgnames: pgnames.append(g.namestr) pgoptions.append(OPTION(g.namestr, _value=g.id)) formpg = FORM('Select earlier guest:', SELECT(*pgoptions, **dict(_name='pguest')), INPUT(_type="submit", _value="Add guest")) if formpg.accepts(request.vars, session): guestres=db.Reservations[formpg.vars.pguest] guestid = db.Reservations.insert( Member=reservation.Member, Event=reservation.Event, Host=False, Title=guestres.Title, Firstname=guestres.Firstname, Lastname=guestres.Lastname, Suffix=guestres.Suffix, Affiliation=guestres.Affiliation, Unitcost=reservation.Unitcost) if len(event.Menuchoices)>1: session.flash="Guest reservation added" eventtotals(event, db(db.Reservations.Event==reservation.Event).select()) redirect(URL('guestreservationform', vars=dict(resvid=guestid, next=URL('reservationform', vars=dict(resvid=request.vars.resvid, next=request.vars.next))))) else: response.flash="Guest reservation added" reservation.update_record(Title=member.Title, Firstname=member.Firstname, Lastname=member.Lastname, Suffix=member.Suffix) guests = db(db.Reservations.Event==reservation.Event).select() eventtotals(event, guests) guests = guests.find(lambda r: r.Member==reservation.Member and r.Host==False) guests = guests.sort(lambda r: r.Lastname + r.Firstname) db.Reservations.Menuchoice.requires=IS_IN_SET(event.Menuchoices) if len(event.Menuchoices)>1: db.Reservations.Menuchoice.comment='Please select menu choice' affs = db(db.Affiliations.Member == member.id).select(orderby=db.Affiliations.Modified) if len(affs) > 0: cl = [] for a in affs: cl.append(a.College) affl = db(db.Colleges.id.belongs(cl)) db.Reservations.Affiliation.requires = \ IS_EMPTY_OR(IS_IN_DB(affl, db.Colleges.id, '%(Name)s', orderby=db.Colleges.Name)) form = crud.update(db.Reservations, request.vars.resvid, deletable = True, onvalidation=setmodified, ondelete=delreservation, onaccept=modreservation) form[0][-1][1].append(INPUT(_type="button",_value="Cancel", _onclick="window.location='%s';"%request.vars.next)) form[0][-1][2].append(B('NOTE: changes are not effective until submitted', _style='color:red;')) return dict(form=form, formpg=formpg, guests=guests, next=request.vars.next, resvid=request.vars.resvid, membid=member.id, eventid=reservation.Event) member = db.Members[request.vars.membid] if request.vars.eventid: db.Reservations.Event.writable=False db.Reservations.Event.default= request.vars.eventid event = db.Events[request.vars.eventid] if member.Status=='Student': db.Reservations.Unitcost.default=event.Studentcost else: db.Reservations.Unitcost.default=event.Fullcost db.Reservations.Menuchoice.requires=IS_IN_SET(event.Menuchoices) if len(event.Menuchoices)>1: db.Reservations.Menuchoice.comment='Please select menu choice' else: db.Reservations.Event.writable = True db.Reservations.Unitcost.comment = 'leave blank to use event defaults' db.Reservations.Event.comment = 'Select event' db.Reservations.Menuchoice.writable=False db.Reservations.Menuchoice.readable=False if (member.Status=='Inactive')\ or ((member.Status!='Comp')\ and (member.Paiddate==None or (member.Paiddate<request.now.date()))): db.Reservations.Notes.default = '***TBC membership?' db.Reservations.Notes.comment='Member of, e.g. AUA?' db.Reservations.Member.default= request.vars.membid affs = db(db.Affiliations.Member == request.vars.membid).select(orderby=db.Affiliations.Modified) aff = affs.first() if aff: db.Reservations.Affiliation.default=aff.College cl = [] for a in affs: cl.append(a.College) affl = db(db.Colleges.id.belongs(cl)) db.Reservations.Affiliation.requires = \ IS_EMPTY_OR(IS_IN_DB(affl, db.Colleges.id, '%(Name)s', orderby=db.Colleges.Name)) form = crud.create(db.Reservations, onvalidation=chknewreservation, onaccept=newreservation) form[0][-1][1].append(INPUT(_type="button",_value="Cancel", _onclick="window.location='%s';"%request.vars.next)) form[0][-1][2].append(B('NOTE: changes are not effective until submitted', _style='color:red;')) return dict(form=form, formpg=None, next=request.vars.next, guests=None, resvid=request.vars.resvid, membid=request.vars.membid, eventid=request.vars.eventid)