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 [email protected].
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)