📄 base.py
字号:
def test_find_order_desc(self, *args): result = self.store.find(Foo).order_by(Desc(Foo.title)) lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, [ (10, "Title 30"), (20, "Title 20"), (30, "Title 10"), ]) def test_find_default_order_asc(self): class MyFoo(Foo): __storm_order__ = "title" result = self.store.find(MyFoo) lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, [ (30, "Title 10"), (20, "Title 20"), (10, "Title 30"), ]) def test_find_default_order_asc(self): class MyFoo(Foo): __storm_order__ = "-title" result = self.store.find(MyFoo) lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, [ (10, "Title 30"), (20, "Title 20"), (30, "Title 10"), ]) def test_find_default_order_with_tuple(self): class MyLink(Link): __storm_order__ = ("foo_id", "-bar_id") result = self.store.find(MyLink) lst = [(link.foo_id, link.bar_id) for link in result] self.assertEquals(lst, [ (10, 300), (10, 200), (10, 100), (20, 200), (20, 100), (30, 300), ]) def test_find_default_order_with_tuple_and_expr(self): class MyLink(Link): __storm_order__ = ("foo_id", Desc(Link.bar_id)) result = self.store.find(MyLink) lst = [(link.foo_id, link.bar_id) for link in result] self.assertEquals(lst, [ (10, 300), (10, 200), (10, 100), (20, 200), (20, 100), (30, 300), ]) def test_find_index(self): foo = self.store.find(Foo).order_by(Foo.title)[0] self.assertEquals(foo.id, 30) self.assertEquals(foo.title, "Title 10") foo = self.store.find(Foo).order_by(Foo.title)[1] self.assertEquals(foo.id, 20) self.assertEquals(foo.title, "Title 20") foo = self.store.find(Foo).order_by(Foo.title)[2] self.assertEquals(foo.id, 10) self.assertEquals(foo.title, "Title 30") foo = self.store.find(Foo).order_by(Foo.title)[1:][1] self.assertEquals(foo.id, 10) self.assertEquals(foo.title, "Title 30") result = self.store.find(Foo).order_by(Foo.title) self.assertRaises(IndexError, result.__getitem__, 3) def test_find_slice(self): result = self.store.find(Foo).order_by(Foo.title)[1:2] lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, [(20, "Title 20")]) def test_find_slice_offset(self): result = self.store.find(Foo).order_by(Foo.title)[1:] lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, [(20, "Title 20"), (10, "Title 30")]) def test_find_slice_offset_any(self): foo = self.store.find(Foo).order_by(Foo.title)[1:].any() self.assertEquals(foo.id, 20) self.assertEquals(foo.title, "Title 20") def test_find_slice_offset_one(self): foo = self.store.find(Foo).order_by(Foo.title)[1:2].one() self.assertEquals(foo.id, 20) self.assertEquals(foo.title, "Title 20") def test_find_slice_offset_first(self): foo = self.store.find(Foo).order_by(Foo.title)[1:].first() self.assertEquals(foo.id, 20) self.assertEquals(foo.title, "Title 20") def test_find_slice_offset_last(self): foo = self.store.find(Foo).order_by(Foo.title)[1:].last() self.assertEquals(foo.id, 10) self.assertEquals(foo.title, "Title 30") def test_find_slice_limit(self): result = self.store.find(Foo).order_by(Foo.title)[:2] lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, [(30, "Title 10"), (20, "Title 20")]) def test_find_slice_limit_last(self): result = self.store.find(Foo).order_by(Foo.title)[:2] self.assertRaises(FeatureError, result.last) def test_find_slice_slice(self): result = self.store.find(Foo).order_by(Foo.title)[0:2][1:3] lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, [(20, "Title 20")]) result = self.store.find(Foo).order_by(Foo.title)[:2][1:3] lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, [(20, "Title 20")]) result = self.store.find(Foo).order_by(Foo.title)[1:3][0:1] lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, [(20, "Title 20")]) result = self.store.find(Foo).order_by(Foo.title)[1:3][:1] lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, [(20, "Title 20")]) result = self.store.find(Foo).order_by(Foo.title)[5:5][1:1] lst = [(foo.id, foo.title) for foo in result] self.assertEquals(lst, []) def test_find_slice_order_by(self): result = self.store.find(Foo)[2:] self.assertRaises(FeatureError, result.order_by, None) result = self.store.find(Foo)[:2] self.assertRaises(FeatureError, result.order_by, None) def test_find_slice_remove(self): result = self.store.find(Foo)[2:] self.assertRaises(FeatureError, result.remove) result = self.store.find(Foo)[:2] self.assertRaises(FeatureError, result.remove) def test_find_any(self, *args): foo = self.store.find(Foo).order_by(Foo.title).any() self.assertEquals(foo.id, 30) self.assertEquals(foo.title, "Title 10") foo = self.store.find(Foo).order_by(Foo.id).any() self.assertEquals(foo.id, 10) self.assertEquals(foo.title, "Title 30") foo = self.store.find(Foo, id=40).any() self.assertEquals(foo, None) def test_find_first(self, *args): self.assertRaises(UnorderedError, self.store.find(Foo).first) foo = self.store.find(Foo).order_by(Foo.title).first() self.assertEquals(foo.id, 30) self.assertEquals(foo.title, "Title 10") foo = self.store.find(Foo).order_by(Foo.id).first() self.assertEquals(foo.id, 10) self.assertEquals(foo.title, "Title 30") foo = self.store.find(Foo, id=40).order_by(Foo.id).first() self.assertEquals(foo, None) def test_find_last(self, *args): self.assertRaises(UnorderedError, self.store.find(Foo).last) foo = self.store.find(Foo).order_by(Foo.title).last() self.assertEquals(foo.id, 10) self.assertEquals(foo.title, "Title 30") foo = self.store.find(Foo).order_by(Foo.id).last() self.assertEquals(foo.id, 30) self.assertEquals(foo.title, "Title 10") foo = self.store.find(Foo, id=40).order_by(Foo.id).last() self.assertEquals(foo, None) def test_find_last_desc(self, *args): foo = self.store.find(Foo).order_by(Desc(Foo.title)).last() self.assertEquals(foo.id, 30) self.assertEquals(foo.title, "Title 10") foo = self.store.find(Foo).order_by(Asc(Foo.id)).last() self.assertEquals(foo.id, 30) self.assertEquals(foo.title, "Title 10") def test_find_one(self, *args): self.assertRaises(NotOneError, self.store.find(Foo).one) foo = self.store.find(Foo, id=10).one() self.assertEquals(foo.id, 10) self.assertEquals(foo.title, "Title 30") foo = self.store.find(Foo, id=40).one() self.assertEquals(foo, None) def test_find_count(self): self.assertEquals(self.store.find(Foo).count(), 3) def test_find_count_column(self): self.assertEquals(self.store.find(Link).count(Link.foo_id), 6) def test_find_count_column_distinct(self): count = self.store.find(Link).count(Link.foo_id, distinct=True) self.assertEquals(count, 3) def test_find_max(self): self.assertEquals(self.store.find(Foo).max(Foo.id), 30) def test_find_max_unicode(self): title = self.store.find(Foo).max(Foo.title) self.assertEquals(title, "Title 30") self.assertTrue(isinstance(title, unicode)) def test_find_min(self): self.assertEquals(self.store.find(Foo).min(Foo.id), 10) def test_find_min_unicode(self): title = self.store.find(Foo).min(Foo.title) self.assertEquals(title, "Title 10") self.assertTrue(isinstance(title, unicode)) def test_find_avg(self): self.assertEquals(self.store.find(Foo).avg(Foo.id), 20) def test_find_avg_float(self): foo = Foo() foo.id = 15 foo.title = u"Title 15" self.store.add(foo) self.assertEquals(self.store.find(Foo).avg(Foo.id), 18.75) def test_find_sum(self): self.assertEquals(self.store.find(Foo).sum(Foo.id), 60) def test_find_max_order_by(self): """Interaction between order by and aggregation shouldn't break.""" result = self.store.find(Foo) self.assertEquals(result.order_by(Foo.id).max(Foo.id), 30) def test_find_values(self): values = self.store.find(Foo).order_by(Foo.id).values(Foo.id) self.assertEquals(list(values), [10, 20, 30]) values = self.store.find(Foo).order_by(Foo.id).values(Foo.title) values = list(values) self.assertEquals(values, ["Title 30", "Title 20", "Title 10"]) self.assertEquals([type(value) for value in values], [unicode, unicode, unicode]) def test_find_multiple_values(self): result = self.store.find(Foo).order_by(Foo.id) values = result.values(Foo.id, Foo.title) self.assertEquals(list(values), [(10, "Title 30"), (20, "Title 20"), (30, "Title 10")]) def test_find_values_with_no_arguments(self): result = self.store.find(Foo).order_by(Foo.id) self.assertRaises(FeatureError, result.values().next) def test_find_slice_values(self): values = self.store.find(Foo).order_by(Foo.id)[1:2].values(Foo.id) self.assertEquals(list(values), [20]) def test_find_remove(self): self.store.find(Foo, Foo.id == 20).remove() self.assertEquals(self.get_items(), [ (10, "Title 30"), (30, "Title 10"), ]) def test_find_cached(self): foo = self.store.get(Foo, 20) bar = self.store.get(Bar, 200) self.assertTrue(foo) self.assertTrue(bar) self.assertEquals(self.store.find(Foo).cached(), [foo]) def test_find_cached_where(self): foo1 = self.store.get(Foo, 10) foo2 = self.store.get(Foo, 20) bar = self.store.get(Bar, 200) self.assertTrue(foo1) self.assertTrue(foo2) self.assertTrue(bar) self.assertEquals(self.store.find(Foo, title=u"Title 20").cached(), [foo2]) def test_find_cached_invalidated(self): foo = self.store.get(Foo, 20) self.store.invalidate(foo) self.assertEquals(self.store.find(Foo).cached(), [foo]) def test_find_cached_invalidated_and_deleted(self): foo = self.store.get(Foo, 20) self.store.execute("DELETE FROM foo WHERE id=20") self.store.invalidate(foo) # Do not look for the primary key (id), since it's able to get # it without touching the database. Use the title instead. self.assertEquals(self.store.find(Foo, title=u"Title 20").cached(), []) def test_using_find_join(self): bar = self.store.get(Bar, 100) bar.foo_id = None tables = self.store.using(Foo, LeftJoin(Bar, Bar.foo_id == Foo.id)) result = tables.find(Bar).order_by(Foo.id, Bar.id) lst = [bar and (bar.id, bar.title) for bar in result] self.assertEquals(lst, [ None, (200, u"Title 200"), (300, u"Title 100"), ]) def test_using_find_with_strings(self): foo = self.store.using("foo").find(Foo, id=10).one() self.assertEquals(foo.title, "Title 30") foo = self.store.using("foo", "bar").find(Foo, id=10).any() self.assertEquals(foo.title, "Title 30") def test_using_find_join_with_strings(self): bar = self.store.get(Bar, 100) bar.foo_id = None tables = self.store.using(LeftJoin("foo", "bar", "bar.foo_id = foo.id")) result = tables.find(Bar).order_by(Foo.id, Bar.id) lst = [bar and (bar.id, bar.title) for bar in result] self.assertEquals(lst, [ None, (200, u"Title 200"), (300, u"Title 100"), ]) def test_find_tuple(self): bar = self.store.get(Bar, 200) bar.foo_id = None result = self.store.find((Foo, Bar), Bar.foo_id == Foo.id) result = result.order_by(Foo.id) lst = [(foo and (foo.id, foo.title), bar and (bar.id, bar.title)) for (foo, bar) in result] self.assertEquals(lst, [ ((10, u"Title 30"), (100, u"Title 300")), ((30, u"Title 10"), (300, u"Title 100")), ]) def test_find_tuple_using(self): bar = self.store.get(Bar, 200) bar.foo_id = None tables = self.store.using(Foo, LeftJoin(Bar, Bar.foo_id == Foo.id)) result = tables.find((Foo, Bar)).order_by(Foo.id) lst = [(foo and (foo.id, foo.title), bar and (bar.id, bar.title)) for (foo, bar) in result] self.assertEquals(lst, [ ((10, u"Title 30"), (100, u"Title 300")), ((20, u"Title 20"), None), ((30, u"Title 10"), (300, u"Title 100")), ]) def test_find_tuple_using_skip_when_none(self): bar = self.store.get(Bar, 200) bar.foo_id = None tables = self.store.using(Foo, LeftJoin(Bar, Bar.foo_id == Foo.id), LeftJoin(Link, Link.bar_id == Bar.id)) result = tables.find((Bar, Link)).order_by(Foo.id, Bar.id, Link.foo_id) lst = [(bar and (bar.id, bar.title),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -