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)

Reply via email to