#!/usr/bin/env python
# export PYTHONPATH=.../web2py
from gluon import DAL, Field
def def_tables(db):
p2 = db.define_table('p2',
Field('name', 'string'),
Field('is_active', 'boolean', default=True),
common_filter = lambda q: db.p2.is_active==True)
def get_db():
return DAL('sqlite://storage.sqlite')
def get_db_with_schema():
db = get_db()
def_tables(db)
return db
def db_ops(db):
db.p2.truncate()
db.p2.insert(name='Alice')
db.p2.insert(name='Bob')
db.commit()
print 'before deactivating Alice'
print db(db.p2.name=='Alice').update(is_active=False)
print 'after deactivating Alice'
db.commit()
def test():
db = get_db_with_schema()
db_ops(db)
print db.p2._common_filter
print 1, [r.name for r in db().select(db.p2.name)]
print 2, [r.name for r in
db(ignore_common_filters=False).select(db.p2.name)]
print 3, [r.name for r in
db(ignore_common_filters=True).select(db.p2.name)]
print 4, [r.name for r in db(db.p2.is_active==True).select(db.p2.name)]
if __name__ == "__main__":
test()
$ sqlite3 -column -header storage.sqlite 'select * from p2;'
id name description is_active
---------- ---------- ----------- ----------
1 Alice F
2 Bob T
$ python test_common_filter.py # against git main branch 1b0e08
before deactivating Alice
1
after deactivating Alice
<function <lambda> at 0x2aca500>
1 ['Alice', 'Bob']
2 ['Alice', 'Bob']
3 ['Alice', 'Bob']
4 ['Bob']
This is as if common_filter has no effect at all. I was expecting to see
1 ['Bob']
2 ['Bob']
3 ['Alice', 'Bob']
4 ['Bob']
Did I miss something? Or is this a bug?
Thanks!
-Brian
--