Dear all,
I just updated web2py and after turning on the lazy_table I got:
Traceback (most recent call last):
File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 209, in
restricted
exec ccode in environment
File
"/home/paolo/Dropbox/git/web2py/applications/bikend/views/load/reviewsFilter.html",
line 57, in <module>
var str = '{{=T('Route ')}}<small>NAME </small><b class="caret">
</b>'.replace(/NAME/gi, $(this).text());
File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 8810, in __call__
return self.method(self.row,*args,**kwargs)
File "/home/paolo/Dropbox/git/web2py/applications/bikend/models/db.py"
<http://127.0.0.1:8000/admin/default/edit/bikend/models/db.py>, line 427, in
<lambda>
db.reviews.pos = Field.Lazy(lambda row: db((db.reviews_like.review_id ==
row.reviews.id) & (db.reviews_like.helpful == True)).count() )
File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 8675, in count
return db._adapter.count(self.query,distinct)
File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1542, in count
self.execute(self._count(query, distinct))
File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1598, in execute
return self.log_execute(*a, **b)
File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1592, in log_execute
ret = self.cursor.execute(*a, **b)
ProgrammingError: Cannot operate on a closed database.
The table involved in the error is defined as follows:
db.define_table('reviews_like',
Field('review_id', 'reference reviews'),
Field('helpful', 'boolean',
widget = BuildRadioButtonWidget),
Field('created_on', 'datetime', default=request.now,
writable = False, readable = False),
Field('user_id', db.auth_user, default=auth.user_id,
writable = False, readable = False)
)
db.define_table('reviews',
Field('route_id', 'reference route', default=db.route.id),
Field('rating', 'integer',requires=IS_IN_SET(range(1,6))),
Field('title', 'string',
requires=(IS_NOT_EMPTY(error_message=T('Enter a
title')),IS_LENGTH(250,error_message=T('Warning, title too long')),
IS_LENGTH(minsize=3, error_message=T('Warning, title too short')))),
Field('description', 'text',
requires=(IS_NOT_EMPTY(error_message=T('Please, enter a
description')),IS_LENGTH(250,error_message=T('Warning, description too
long')), IS_LENGTH(minsize=75, error_message=T('Warning, the description is
too short, reviews must be at least 75 characters long.')))),
auth.signature,
)
db.reviews.route_id.readable = False
db.reviews.route_id.writable = False
db.reviews.rating.widget = starWidget
db.reviews.pos = Field.Lazy(lambda row: db((db.reviews_like.review_id ==
row.reviews.id) & (db.reviews_like.helpful == True)).count() )
db.reviews.neg = Field.Lazy(lambda row: db((db.reviews_like.review_id ==
row.reviews.id) & (db.reviews_like.helpful == False)).count() )
what is wrong ?
Cheers
Paolo
--