from__future__import print_function
fromsqlobjectimport IntCol, SQLObject, StringCol, events
fromsqlobject.inheritanceimport InheritableSQLObject
fromsqlobject.tests.dbtestimport setupClass
[docs]
classEventTester(SQLObject):
name = StringCol()
[docs]
defmake_watcher():
log = []
defwatch(*args):
log.append(args)
watch.log = log
return watch
[docs]
defmake_listen(signal, cls=None):
if cls is None:
cls = EventTester
watcher = make_watcher()
events.listen(watcher, cls, signal)
return watcher
[docs]
deftest_create():
watcher = make_listen(events.ClassCreateSignal)
classEventTesterSub1(EventTester):
pass
classEventTesterSub2(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]
deftest_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]
deftest_row_destroy():
setupClass(EventTester)
watcher = make_listen(events.RowDestroySignal)
f = EventTester(name='foo')
assert not watcher.log
f.destroySelf()
assert watcher.log == [(f, [])]
[docs]
deftest_row_destroyed():
setupClass(EventTester)
watcher = make_listen(events.RowDestroyedSignal)
f = EventTester(name='foo')
assert not watcher.log
f.destroySelf()
assert watcher.log == [(f, [])]
[docs]
deftest_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]
deftest_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]
deftest_add_column():
setupClass(EventTester)
watcher = make_listen(events.AddColumnSignal)
events.summarize_events_by_sender()
classNewEventTester(EventTester):
name2 = StringCol()
expect = (
NewEventTester, None,
'name2', NewEventTester.sqlmeta.columnDefinitions['name2'],
False, [])
print(zip(watcher.log[1], expect))
assert watcher.log[1] == expect
[docs]
classInheritableEventTestA(InheritableSQLObject):
a = IntCol()
[docs]
classInheritableEventTestB(InheritableEventTestA):
b = IntCol()
[docs]
classInheritableEventTestC(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]
deftest_inheritance_row_created():
setupClass([InheritableEventTestA, InheritableEventTestB,
InheritableEventTestC])
events.listen(_signal, InheritableEventTestA, events.RowCreatedSignal)
InheritableEventTestC(a=1, b=2, c=3)