#!/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

-- 



Reply via email to