📄 base.py
字号:
def test_update_checkpoints(self): bar = self.store.get(Bar, 200) bar.title = u"Title 400" self.store.flush() self.store.execute("UPDATE bar SET title='Title 500' " "WHERE id=200") bar.foo_id = 40 # When not checkpointing, this flush will set title again. self.store.flush() self.store.reload(bar) self.assertEquals(bar.title, "Title 500") def test_update_primary_key(self): foo = self.store.get(Foo, 20) foo.id = 25 self.store.commit() self.assertEquals(self.get_committed_items(), [ (10, "Title 30"), (25, "Title 20"), (30, "Title 10"), ]) # Update twice to see if the notion of primary key for the # existent object was updated as well. foo.id = 27 self.store.commit() self.assertEquals(self.get_committed_items(), [ (10, "Title 30"), (27, "Title 20"), (30, "Title 10"), ]) # Ensure only the right ones are there. self.assertTrue(self.store.get(Foo, 27) is foo) self.assertTrue(self.store.get(Foo, 25) is None) self.assertTrue(self.store.get(Foo, 20) is None) def test_update_primary_key_exchange(self): foo1 = self.store.get(Foo, 10) foo2 = self.store.get(Foo, 30) foo1.id = 40 self.store.flush() foo2.id = 10 self.store.flush() foo1.id = 30 self.assertTrue(self.store.get(Foo, 30) is foo1) self.assertTrue(self.store.get(Foo, 10) is foo2) self.store.commit() self.assertEquals(self.get_committed_items(), [ (10, "Title 10"), (20, "Title 20"), (30, "Title 30"), ]) def test_wb_update_not_dirty_after_flush(self): foo = self.store.get(Foo, 20) foo.title = u"Title 200" self.store.flush() # If changes get committed even with the notification disabled, # it means the dirty flag isn't being cleared. self.store._disable_change_notification(get_obj_info(foo)) foo.title = u"Title 2000" self.store.flush() self.assertEquals(self.get_items(), [ (10, "Title 30"), (20, "Title 200"), (30, "Title 10"), ]) def test_update_find(self): foo = self.store.get(Foo, 20) foo.title = u"Title 200" result = self.store.find(Foo, Foo.title == u"Title 200") self.assertTrue(result.one() is foo) def test_update_get(self): foo = self.store.get(Foo, 20) foo.id = 200 self.assertTrue(self.store.get(Foo, 200) is foo) def test_add_update(self): foo = Foo() foo.id = 40 foo.title = u"Title 40" self.store.add(foo) foo.title = u"Title 400" self.store.flush() self.assertEquals(self.get_items(), [ (10, "Title 30"), (20, "Title 20"), (30, "Title 10"), (40, "Title 400"), ]) def test_add_remove_add(self): foo = Foo() foo.id = 40 foo.title = u"Title 40" self.store.add(foo) self.store.remove(foo) self.assertEquals(Store.of(foo), None) foo.title = u"Title 400" self.store.add(foo) foo.id = 400 self.store.commit() self.assertEquals(Store.of(foo), self.store) self.assertEquals(self.get_items(), [ (10, "Title 30"), (20, "Title 20"), (30, "Title 10"), (400, "Title 400"), ]) self.assertTrue(self.store.get(Foo, 400) is foo) def test_wb_add_remove_add(self): foo = Foo() obj_info = get_obj_info(foo) self.store.add(foo) self.assertTrue(obj_info in self.store._dirty) self.store.remove(foo) self.assertTrue(obj_info not in self.store._dirty) self.store.add(foo) self.assertTrue(obj_info in self.store._dirty) self.assertTrue(Store.of(foo) is self.store) def test_wb_update_remove_add(self): foo = self.store.get(Foo, 20) foo.title = u"Title 200" obj_info = get_obj_info(foo) self.store.remove(foo) self.store.add(foo) self.assertTrue(obj_info in self.store._dirty) def test_commit_autoreloads(self): foo = self.store.get(Foo, 20) self.assertEquals(foo.title, "Title 20") self.store.execute("UPDATE foo SET title='New Title' WHERE id=20") self.assertEquals(foo.title, "Title 20") self.store.commit() self.assertEquals(foo.title, "New Title") def test_commit_invalidates(self): foo = self.store.get(Foo, 20) self.assertTrue(foo) self.store.execute("DELETE FROM foo WHERE id=20") self.assertEquals(self.store.get(Foo, 20), foo) self.store.commit() self.assertEquals(self.store.get(Foo, 20), None) def test_rollback_autoreloads(self): foo = self.store.get(Foo, 20) self.assertEquals(foo.title, "Title 20") self.store.rollback() self.store.execute("UPDATE foo SET title='New Title' WHERE id=20") self.assertEquals(foo.title, "New Title") def test_rollback_invalidates(self): foo = self.store.get(Foo, 20) self.assertTrue(foo) self.assertEquals(self.store.get(Foo, 20), foo) self.store.rollback() self.store.execute("DELETE FROM foo WHERE id=20") self.assertEquals(self.store.get(Foo, 20), None) def test_sub_class(self): class SubFoo(Foo): id = Float(primary=True) foo1 = self.store.get(Foo, 20) foo2 = self.store.get(SubFoo, 20) self.assertEquals(foo1.id, 20) self.assertEquals(foo2.id, 20) self.assertEquals(type(foo1.id), int) self.assertEquals(type(foo2.id), float) def test_join(self): class Bar(object): __storm_table__ = "bar" id = Int(primary=True) title = Unicode() bar = Bar() bar.id = 40 bar.title = u"Title 20" self.store.add(bar) # Add anbar object with the same title to ensure DISTINCT # is in place. bar = Bar() bar.id = 400 bar.title = u"Title 20" self.store.add(bar) result = self.store.find(Foo, Foo.title == Bar.title) self.assertEquals([(foo.id, foo.title) for foo in result], [ (20, "Title 20"), (20, "Title 20"), ]) def test_join_distinct(self): class Bar(object): __storm_table__ = "bar" id = Int(primary=True) title = Unicode() bar = Bar() bar.id = 40 bar.title = u"Title 20" self.store.add(bar) # Add a bar object with the same title to ensure DISTINCT # is in place. bar = Bar() bar.id = 400 bar.title = u"Title 20" self.store.add(bar) result = self.store.find(Foo, Foo.title == Bar.title) result.config(distinct=True) # Make sure that it won't unset it, and that it's returning itself. config = result.config() self.assertEquals([(foo.id, foo.title) for foo in result], [ (20, "Title 20"), ]) def test_sub_select(self): foo = self.store.find(Foo, Foo.id == Select(SQL("20"))).one() self.assertTrue(foo) self.assertEquals(foo.id, 20) self.assertEquals(foo.title, "Title 20") def test_cache_has_improper_object(self): foo = self.store.get(Foo, 20) self.store.remove(foo) self.store.commit() self.store.execute("INSERT INTO foo VALUES (20, 'Title 20')") self.assertTrue(self.store.get(Foo, 20) is not foo) def test_cache_has_improper_object_readded(self): foo = self.store.get(Foo, 20) self.store.remove(foo) self.store.flush() old_foo = foo # Keep a reference. foo = Foo() foo.id = 20 foo.title = u"Readded" self.store.add(foo) self.store.commit() self.assertTrue(self.store.get(Foo, 20) is foo) def test_loaded_hook(self): loaded = [] class MyFoo(Foo): def __init__(self): loaded.append("NO!") def __storm_loaded__(self): loaded.append((self.id, self.title)) self.title = u"Title 200" self.some_attribute = 1 foo = self.store.get(MyFoo, 20) self.assertEquals(loaded, [(20, "Title 20")]) self.assertEquals(foo.title, "Title 200") self.assertEquals(foo.some_attribute, 1) foo.some_attribute = 2 self.store.flush() self.assertEquals(self.get_items(), [ (10, "Title 30"), (20, "Title 200"), (30, "Title 10"), ]) self.store.rollback() self.assertEquals(foo.title, "Title 20") self.assertEquals(foo.some_attribute, 2) def test_flushed_hook(self): class MyFoo(Foo): done = False def __storm_flushed__(self): if not self.done: self.done = True self.title = u"Flushed: %s" % self.title foo = self.store.get(MyFoo, 20) self.assertEquals(foo.title, "Title 20") self.store.flush() self.assertEquals(foo.title, "Title 20") # It wasn't dirty. foo.title = u"Something" self.store.flush() self.assertEquals(foo.title, "Flushed: Something") # It got in the database, because it was flushed *twice* (the # title was changed after flushed, and thus the object got dirty # again). self.assertEquals(self.get_items(), [ (10, "Title 30"), (20, "Flushed: Something"), (30, "Title 10"), ]) # This shouldn't do anything, because the object is clean again. foo.done = False self.store.flush() self.assertEquals(foo.title, "Flushed: Something") def test_retrieve_default_primary_key(self): foo = Foo() foo.title = u"Title 40" self.store.add(foo) self.store.flush() self.assertNotEquals(foo.id, None) self.assertTrue(self.store.get(Foo, foo.id) is foo) def test_retrieve_default_value(self): foo = Foo() foo.id = 40 self.store.add(foo) self.store.flush() self.assertEquals(foo.title, "Default Title") def test_wb_remove_prop_not_dirty(self): foo = self.store.get(Foo, 20) obj_info = get_obj_info(foo) del foo.title self.assertTrue(obj_info not in self.store._dirty) def test_flush_with_removed_prop(self): foo = self.store.get(Foo, 20) del foo.title self.store.flush() self.assertEquals(self.get_items(), [ (10, "Title 30"), (20, "Title 20"), (30, "Title 10"), ]) def test_flush_with_removed_prop_forced_dirty(self): foo = self.store.get(Foo, 20) del foo.title
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -