diff --git a/anki/decks.py b/anki/decks.py index bb6da9130..95caac797 100644 --- a/anki/decks.py +++ b/anki/decks.py @@ -115,7 +115,7 @@ class DeckManager(object): g = copy.deepcopy(type) if "::" in name: # not top level; ensure all parents exist - self._ensureParents(name) + name = self._ensureParents(name) g['name'] = name while 1: id = intTime(1000) @@ -230,13 +230,20 @@ class DeckManager(object): return self._path(name)[-1] def _ensureParents(self, name): + "Ensure parents exist, and return name with case matching parents." s = "" - for p in self._path(name)[:-1]: + path = self._path(name) + for p in path[:-1]: if not s: s += p else: s += "::" + p - self.id(s) + # fetch or create + did = self.id(s) + # get original case + s = self.name(did) + name = s + "::" + path[-1] + return name # Deck configurations ############################################################# diff --git a/tests/test_decks.py b/tests/test_decks.py index 9cfd2b7e3..08e8231bd 100644 --- a/tests/test_decks.py +++ b/tests/test_decks.py @@ -30,6 +30,16 @@ def test_basic(): deck.decks.select(childId) assert deck.decks.selected() == childId assert deck.decks.active() == [childId] + # parents with a different case should be handled correctly + deck.decks.id("ONE") + m = deck.models.current() + m['did'] = deck.decks.id("one::two") + deck.models.save(m) + n = deck.newNote() + n['Front'] = "abc" + deck.addNote(n) + # this will error if child and parent case don't match + deck.sched.deckDueList() def test_remove(): deck = getEmptyDeck()