diff --git a/anki/sched.py b/anki/sched.py index ce6440ee2..a08a85773 100644 --- a/anki/sched.py +++ b/anki/sched.py @@ -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] diff --git a/tests/test_sched.py b/tests/test_sched.py index 839df0b9a..27c506a95 100644 --- a/tests/test_sched.py +++ b/tests/test_sched.py @@ -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