Source code for sqlobject.tests.test_events
from __future__ import print_function
from sqlobject import IntCol, SQLObject, StringCol, events
from sqlobject.inheritance import InheritableSQLObject
from sqlobject.tests.dbtest import setupClass
[docs]class EventTester(SQLObject):
    name = StringCol() 
[docs]def make_watcher():
    log = []
    def watch(*args):
        log.append(args)
    watch.log = log
    return watch 
[docs]def make_listen(signal, cls=None):
    if cls is None:
        cls = EventTester
    watcher = make_watcher()
    events.listen(watcher, cls, signal)
    return watcher 
[docs]def test_create():
    watcher = make_listen(events.ClassCreateSignal)
    class EventTesterSub1(EventTester):
        pass
    class EventTesterSub2(EventTesterSub1):
        pass
    assert len(watcher.log) == 2
    assert len(watcher.log[0]) == 5
    assert watcher.log[0][0] == 'EventTesterSub1'
    assert watcher.log[0][1] == (EventTester,)
    assert isinstance(watcher.log[0][2], dict)
    assert isinstance(watcher.log[0][3], list) 
[docs]def test_row_create():
    setupClass(EventTester)
    watcher = make_listen(events.RowCreateSignal)
    row1 = EventTester(name='foo')
    row2 = EventTester(name='bar')
    assert len(watcher.log) == 2
    assert watcher.log == [
        (row1, {'name': 'foo'}, []),
        (row2, {'name': 'bar'}, [])] 
[docs]def test_row_destroy():
    setupClass(EventTester)
    watcher = make_listen(events.RowDestroySignal)
    f = EventTester(name='foo')
    assert not watcher.log
    f.destroySelf()
    assert watcher.log == [(f, [])] 
[docs]def test_row_destroyed():
    setupClass(EventTester)
    watcher = make_listen(events.RowDestroyedSignal)
    f = EventTester(name='foo')
    assert not watcher.log
    f.destroySelf()
    assert watcher.log == [(f, [])] 
[docs]def test_row_update():
    setupClass(EventTester)
    watcher = make_listen(events.RowUpdateSignal)
    f = EventTester(name='bar')
    assert not watcher.log
    f.name = 'bar2'
    f.set(name='bar3')
    assert watcher.log == [
        (f, {'name': 'bar2'}),
        (f, {'name': 'bar3'})] 
[docs]def test_row_updated():
    setupClass(EventTester)
    watcher = make_listen(events.RowUpdatedSignal)
    f = EventTester(name='bar')
    assert not watcher.log
    f.name = 'bar2'
    f.set(name='bar3')
    assert watcher.log == [(f, []), (f, [])] 
[docs]def test_add_column():
    setupClass(EventTester)
    watcher = make_listen(events.AddColumnSignal)
    events.summarize_events_by_sender()
    class NewEventTester(EventTester):
        name2 = StringCol()
    expect = (
        NewEventTester, None,
        'name2', NewEventTester.sqlmeta.columnDefinitions['name2'],
        False, [])
    print(zip(watcher.log[1], expect))
    assert watcher.log[1] == expect 
[docs]class InheritableEventTestA(InheritableSQLObject):
    a = IntCol() 
[docs]class InheritableEventTestB(InheritableEventTestA):
    b = IntCol() 
[docs]class InheritableEventTestC(InheritableEventTestB):
    c = IntCol() 
def _query(instance):
    row = InheritableEventTestA.get(instance.id)
    assert isinstance(row, InheritableEventTestC)
    assert row.c == 3
def _signal(instance, kwargs, postfuncs):
    postfuncs.append(_query)
[docs]def test_inheritance_row_created():
    setupClass([InheritableEventTestA, InheritableEventTestB,
                InheritableEventTestC])
    events.listen(_signal, InheritableEventTestA, events.RowCreatedSignal)
    InheritableEventTestC(a=1, b=2, c=3)