need to sort tree based on split components, not string order

This commit is contained in:
Damien Elmes 2011-10-22 21:14:46 +09:00
parent 716684edae
commit f37f4aff96
2 changed files with 24 additions and 14 deletions

View file

@ -131,29 +131,29 @@ order by due""" % self._groupLimit(),
hasDue = self._groupHasLrn(g['id']) or self._groupHasRev(g['id'])
hasNew = self._groupHasNew(g['id'])
gids[g['id']] = [hasDue or 0, hasNew or 0]
return [[grp['name'], int(gid)]+gids.get(int(gid))
for (gid, grp) in self._orderedGroups()]
def _orderedGroups(self):
grps = self.deck.groups.groups.items()
def key(grp):
return grp[1]['name']
grps.sort(key=key)
return grps
return [[grp['name'], int(gid)]+gids[int(gid)] #.get(int(gid))
for (gid, grp) in self.deck.groups.groups.items()]
def groupCountTree(self):
return self._groupChildren(self.groupCounts())
def groupTree(self):
"Like the count tree without the counts. Faster."
return self._groupChildren([[grp['name'], int(gid), 0, 0, 0]
for (gid, grp) in self._orderedGroups()])
return self._groupChildren(
[[grp['name'], int(gid), 0, 0, 0]
for (gid, grp) in self.deck.groups.groups.items()])
def _groupChildren(self, grps):
tree = []
# split strings
# first, split the group names into components
for g in grps:
g[0] = g[0].split("::", 1)
g[0] = g[0].split("::")
# and sort based on those components
grps.sort(key=itemgetter(0))
# then run main function
return self._groupChildrenMain(grps)
def _groupChildrenMain(self, grps):
tree = []
# group and recurse
def key(grp):
return grp[0][0]

View file

@ -771,6 +771,7 @@ def test_groupCounts():
d.reset()
assert len(d.groups.groups) == 5
cnts = d.sched.groupCounts()
cnts.sort()
assert cnts[0] == ["Default", 1, 0, 1]
assert cnts[1] == ["Default::1", default1, 1, 0]
assert cnts[2] == ["foo", d.groups.id("foo"), 0, 0]
@ -792,6 +793,15 @@ def test_groupCounts():
d.sched.groupCounts()
d.sched.groupCountTree()
def test_groupTree():
d = getEmptyDeck()
d.groups.id("new::b::c")
d.groups.id("new2")
# new should not appear twice in tree
names = [x[0] for x in d.sched.groupCountTree()]
names.remove("new")
assert "new" not in names
def test_groupFlow():
d = getEmptyDeck()
# add a fact with default group