📄 base.py
字号:
foo.id = 40 foo.id = 20 self.store.flush() self.assertEquals(self.get_items(), [ (10, "Title 30"), (20, "Title 20"), (30, "Title 10"), ]) def test_flush_with_removed_prop_really_dirty(self): foo = self.store.get(Foo, 20) del foo.title foo.id = 25 self.store.flush() self.assertEquals(self.get_items(), [ (10, "Title 30"), (25, "Title 20"), (30, "Title 10"), ]) def test_reload(self): foo = self.store.get(Foo, 20) self.store.execute("UPDATE foo SET title='Title 40' WHERE id=20") self.assertEquals(foo.title, "Title 20") self.store.reload(foo) self.assertEquals(foo.title, "Title 40") def test_reload_not_changed(self): foo = self.store.get(Foo, 20) self.store.execute("UPDATE foo SET title='Title 40' WHERE id=20") self.store.reload(foo) for variable in get_obj_info(foo).variables.values(): self.assertFalse(variable.has_changed()) def test_reload_new(self): foo = Foo() foo.id = 40 foo.title = u"Title 40" self.assertRaises(WrongStoreError, self.store.reload, foo) def test_reload_new_unflushed(self): foo = Foo() foo.id = 40 foo.title = u"Title 40" self.store.add(foo) self.assertRaises(NotFlushedError, self.store.reload, foo) def test_reload_removed(self): foo = self.store.get(Foo, 20) self.store.remove(foo) self.store.flush() self.assertRaises(WrongStoreError, self.store.reload, foo) def test_reload_unknown(self): foo = self.store.get(Foo, 20) store = Store(self.database) self.assertRaises(WrongStoreError, store.reload, foo) def test_wb_reload_not_dirty(self): foo = self.store.get(Foo, 20) obj_info = get_obj_info(foo) foo.title = u"Title 40" self.store.reload(foo) self.assertTrue(obj_info not in self.store._dirty) def test_find_set_empty(self): self.store.find(Foo, title=u"Title 20").set() foo = self.store.get(Foo, 20) self.assertEquals(foo.title, "Title 20") def test_find_set(self): self.store.find(Foo, title=u"Title 20").set(title=u"Title 40") foo = self.store.get(Foo, 20) self.assertEquals(foo.title, "Title 40") def test_find_set_column(self): self.store.find(Bar, title=u"Title 200").set(foo_id=Bar.id) bar = self.store.get(Bar, 200) self.assertEquals(bar.foo_id, 200) def test_find_set_expr(self): self.store.find(Foo, title=u"Title 20").set(Foo.title == u"Title 40") foo = self.store.get(Foo, 20) self.assertEquals(foo.title, "Title 40") def test_find_set_none(self): self.store.find(Foo, title=u"Title 20").set(title=None) foo = self.store.get(Foo, 20) self.assertEquals(foo.title, None) def test_find_set_expr_column(self): self.store.find(Bar, id=200).set(Bar.foo_id == Bar.id) bar = self.store.get(Bar, 200) self.assertEquals(bar.id, 200) self.assertEquals(bar.foo_id, 200) def test_find_set_on_cached(self): foo1 = self.store.get(Foo, 20) foo2 = self.store.get(Foo, 30) self.store.find(Foo, id=20).set(id=40) self.assertEquals(foo1.id, 40) self.assertEquals(foo2.id, 30) def test_find_set_expr_on_cached(self): bar = self.store.get(Bar, 200) self.store.find(Bar, id=200).set(Bar.foo_id == Bar.id) self.assertEquals(bar.id, 200) self.assertEquals(bar.foo_id, 200) def test_find_set_none_on_cached(self): foo = self.store.get(Foo, 20) self.store.find(Foo, title=u"Title 20").set(title=None) self.assertEquals(foo.title, None) def test_find_set_on_cached_but_removed(self): foo1 = self.store.get(Foo, 20) foo2 = self.store.get(Foo, 30) self.store.remove(foo1) self.store.find(Foo, id=20).set(id=40) self.assertEquals(foo1.id, 20) self.assertEquals(foo2.id, 30) def test_find_set_on_cached_unsupported_python_expr(self): foo1 = self.store.get(Foo, 20) foo2 = self.store.get(Foo, 30) self.store.find(Foo, Foo.id == Select(SQL("20"))).set(title=u"Title 40") self.assertEquals(foo1.title, "Title 40") self.assertEquals(foo2.title, "Title 10") def test_find_set_expr_unsupported(self): result = self.store.find(Foo, title=u"Title 20") self.assertRaises(FeatureError, result.set, Foo.title > u"Title 40") def test_find_set_expr_unsupported_2(self): result = self.store.find(Foo, title=u"Title 20") self.assertRaises(FeatureError, result.set, Foo.title == Func("func")) def test_find_set_expr_unsupported_autoreloads(self): bar1 = self.store.get(Bar, 200) bar2 = self.store.get(Bar, 300) self.store.find(Bar, id=Select(SQL("200"))).set(title=u"Title 400") bar1_vars = get_obj_info(bar1).variables bar2_vars = get_obj_info(bar2).variables self.assertEquals(bar1_vars[Bar.title].get_lazy(), AutoReload) self.assertEquals(bar2_vars[Bar.title].get_lazy(), AutoReload) self.assertEquals(bar1_vars[Bar.foo_id].get_lazy(), None) self.assertEquals(bar2_vars[Bar.foo_id].get_lazy(), None) self.assertEquals(bar1.title, "Title 400") self.assertEquals(bar2.title, "Title 100") def test_wb_find_set_checkpoints(self): bar = self.store.get(Bar, 200) self.store.find(Bar, id=200).set(title=u"Title 400") self.store._connection.execute("UPDATE bar SET " "title='Title 500' " "WHERE id=200") # When not checkpointing, this flush will set title again. self.store.flush() self.store.reload(bar) self.assertEquals(bar.title, "Title 500") def test_reference(self): bar = self.store.get(Bar, 100) self.assertTrue(bar.foo) self.assertEquals(bar.foo.title, "Title 30") def test_reference_break_on_local_diverged(self): bar = self.store.get(Bar, 100) self.assertTrue(bar.foo) bar.foo_id = 40 self.assertEquals(bar.foo, None) def test_reference_break_on_remote_diverged(self): bar = self.store.get(Bar, 100) bar.foo.id = 40 self.assertEquals(bar.foo, None) def test_reference_break_on_local_diverged_by_lazy(self): bar = self.store.get(Bar, 100) self.assertEquals(bar.foo.id, 10) bar.foo_id = SQL("20") self.assertEquals(bar.foo.id, 20) def test_reference_break_on_remote_diverged_by_lazy(self): bar = self.store.get(Bar, 100) self.assertEquals(bar.foo.id, 10) bar.foo.id = SQL("40") self.assertEquals(bar.foo, None) def test_reference_on_non_primary_key(self): self.store.execute("INSERT INTO bar VALUES (400, 40, 'Title 30')") class MyBar(Bar): foo = Reference(Bar.title, Foo.title) bar = self.store.get(Bar, 400) self.assertEquals(bar.title, "Title 30") self.assertEquals(bar.foo, None) mybar = self.store.get(MyBar, 400) self.assertEquals(mybar.title, "Title 30") self.assertNotEquals(mybar.foo, None) self.assertEquals(mybar.foo.id, 10) self.assertEquals(mybar.foo.title, "Title 30") def test_new_reference(self): bar = Bar() bar.id = 400 bar.title = u"Title 400" bar.foo_id = 10 self.assertEquals(bar.foo, None) self.store.add(bar) self.assertTrue(bar.foo) self.assertEquals(bar.foo.title, "Title 30") def test_set_reference(self): bar = self.store.get(Bar, 100) self.assertEquals(bar.foo.id, 10) foo = self.store.get(Foo, 30) bar.foo = foo self.assertEquals(bar.foo.id, 30) result = self.store.execute("SELECT foo_id FROM bar WHERE id=100") self.assertEquals(result.get_one(), (30,)) def test_reference_assign_remote_key(self): bar = self.store.get(Bar, 100) self.assertEquals(bar.foo.id, 10) bar.foo = 30 self.assertEquals(bar.foo_id, 30) self.assertEquals(bar.foo.id, 30) result = self.store.execute("SELECT foo_id FROM bar WHERE id=100") self.assertEquals(result.get_one(), (30,)) def test_reference_on_added(self): foo = Foo() foo.title = u"Title 40" self.store.add(foo) bar = Bar() bar.id = 400 bar.title = u"Title 400" bar.foo = foo self.store.add(bar) self.assertEquals(bar.foo.id, None) self.assertEquals(bar.foo.title, "Title 40") self.store.flush() self.assertTrue(bar.foo.id) self.assertEquals(bar.foo.title, "Title 40") result = self.store.execute("SELECT foo.title FROM foo, bar " "WHERE bar.id=400 AND " "foo.id = bar.foo_id") self.assertEquals(result.get_one(), ("Title 40",)) def test_reference_on_added_with_autoreload_key(self): foo = Foo() foo.title = u"Title 40" self.store.add(foo) bar = Bar() bar.id = 400 bar.title = u"Title 400" bar.foo = foo self.store.add(bar) self.assertEquals(bar.foo.id, None) self.assertEquals(bar.foo.title, "Title 40") foo.id = AutoReload # Variable shouldn't be autoreloaded yet. obj_info = get_obj_info(foo) self.assertEquals(obj_info.variables[Foo.id].get_lazy(), AutoReload) self.assertEquals(type(foo.id), int) self.store.flush() self.assertTrue(bar.foo.id) self.assertEquals(bar.foo.title, "Title 40") result = self.store.execute("SELECT foo.title FROM foo, bar " "WHERE bar.id=400 AND " "foo.id = bar.foo_id") self.assertEquals(result.get_one(), ("Title 40",)) def test_reference_assign_none(self): foo = Foo() foo.title = u"Title 40" bar = Bar() bar.id = 400 bar.title = u"Title 400" bar.foo = foo bar.foo = None bar.foo = None # Twice to make sure it doesn't blow up. self.store.add(bar) self.store.flush() self.assertEquals(type(bar.id), int) self.assertEquals(foo.id, None) def test_reference_on_added_composed_key(self): class Bar(object): __storm_table__ = "bar" id = Int(primary=True) foo_id = Int() title = Unicode() foo = Reference((foo_id, title), (Foo.id, Foo.title)) foo = Foo() foo.title = u"Title 40" self.store.add(foo) bar = Bar() bar.id = 400 bar.foo = foo self.store.add(bar) self.assertEquals(bar.foo.id, None) self.assertEquals(bar.foo.title, "Title 40") self.assertEquals(bar.title, "Title 40") self.store.flush() self.assertTrue(bar.foo.id) self.assertEquals(bar.foo.title, "Title 40") result = self.store.execute("SELECT foo.title FROM foo, bar " "WHERE bar.id=400 AND " "foo.id = bar.foo_id") self.assertEquals(result.get_one(), ("Title 40",)) def test_reference_assign_composed_remote_key(self): class Bar(object): __storm_table__ = "bar" id = Int(primary=True) foo_id = Int() title = Unicode() foo = Reference((foo_id, title), (Foo.id, Foo.title)) bar = Bar() bar.id = 400 bar.foo = (20, u"Title 20") self.store.add(bar) self.assertEquals(bar.foo_id, 20) self.assertEquals(bar.foo.id, 20) self.assertEquals(bar.title, "Title 20") self.assertEquals(bar.foo.title, "Title 20") def test_reference_on_added_unlink_on_flush(self): foo = Foo() foo.title = u"Title 40" self.store.add(foo) bar = Bar() bar.id = 400 bar.foo = foo bar.title = u"Title 400" self.store.add(bar) foo.id = 40 self.assertEquals(bar.foo_id, 40) foo.id = 50 self.assertEquals(bar.foo_id, 50) foo.id = 60 self.assertEquals(bar.foo_id, 60) self.store.flush() foo.id = 70 self.assertEquals(bar.foo_id, 60) def test_reference_on_two_added(self): foo1 = Foo() foo1.title = u"Title 40" foo2 = Foo() foo2.title = u"Title 40" self.store.add(foo1) self.store.add(foo2) bar = Bar() bar.id = 400 bar.title = u"Title 400" bar.foo = foo1 bar.foo = foo2 self.store.add(bar) foo1.id = 40 self.assertEquals(bar.foo_id, None) foo2.id = 50 self.assertEquals(ba
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -