From 225e31f470f7a3dbebb951fd50a3aca1e86b2c3e Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sun, 12 Oct 2008 03:42:52 +0900 Subject: [PATCH] conditional card generation --- anki/deck.py | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/anki/deck.py b/anki/deck.py index 3260c6372..c71b5824d 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -745,23 +745,46 @@ priority != 0 and due < :now and spaceUntil > :now""", # validate fact.assertValid() fact.assertUnique(self.s) - # and associated cards + # check we have card models available + cms = self.availableCardModels(fact) + print cms + if not cms: + return [] + # proceed n = 0 cards = [] self.s.save(fact) self.flushMod() - for cardModel in fact.model.cardModels: - if cardModel.active: - card = anki.cards.Card(fact, cardModel) - self.flushMod() - self.updatePriority(card) - cards.append(card) + for cardModel in cms: + card = anki.cards.Card(fact, cardModel) + self.flushMod() + self.updatePriority(card) + cards.append(card) # keep track of last used tags for convenience self.lastTags = fact.tags self.setModified() self._countsDirty = True return cards + def availableCardModels(self, fact): + "List of active card models that aren't empty for FACT." + models = [] + for cardModel in fact.model.cardModels: + if cardModel.active: + ok = True + for format in [cardModel.qformat, cardModel.aformat]: + empty = {} + for k in fact.keys(): + empty[k] = u"" + try: + if format % fact == format % empty: + ok = False + except (KeyError, TypeError, ValueError): + ok = False + if ok: + models.append(cardModel) + return models + def addMissingCards(self, fact): "Caller must flush first, flushMod after, and rebuild priorities." for cardModel in fact.model.cardModels: