From 0db95ded74f07c8384ad32f743300a4ed56a2b30 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 12 Mar 2011 23:00:40 +0900 Subject: [PATCH] add template deletion & unit test --- anki/deck.py | 32 -------------------------------- anki/models.py | 41 ++++++++++++++++++++++++++--------------- tests/test_models.py | 20 +++++++++++++++++++- 3 files changed, 45 insertions(+), 48 deletions(-) diff --git a/anki/deck.py b/anki/deck.py index 039fd11ba..65c591e63 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -762,38 +762,6 @@ where id in %s""" % ids2str(ids), new=new.id, ord=new.ord) self.db.executemany("insert into fsums values (?,?,?)", r) self.db.executemany("update facts set sfld = ? where id = ?", r2) - # Card models - ########################################################################## - - def templateUseCount(self, template): - "Return the number of cards using template." - return self.db.scalar(""" -select count(id) from cards where -tid = :id""", id=template.id) - - def addCardModel(self, model, template): - self.modSchema() - model.addCardModel(template) - - def deleteCardModel(self, model, template): - "Delete all cards that use CARDMODEL from the deck." - self.modSchema() - cards = self.db.list("select id from cards where tid = :id", - id=template.id) - self.deleteCards(cards) - model.templates.remove(template) - model.flush() - - def rebuildCardOrds(self, ids): - "Update all card models in IDS. Caller must update model modtime." - self.modSchema() - strids = ids2str(ids) - self.db.execute(""" -update cards set -ord = (select ord from templates where id = tid), -mod = :now -where tid in %s""" % strids, now=time.time()) - # Q/A generation ########################################################################## diff --git a/anki/models.py b/anki/models.py index 02a8b2a9d..724d3c94f 100644 --- a/anki/models.py +++ b/anki/models.py @@ -80,16 +80,6 @@ insert or replace into models values (?, ?, ?, ?, ?, ?, ?)""", def fids(self): return self.deck.db.list("select id from facts where mid = ?", self.id) - # Templates - ################################################## - - def newTemplate(self): - return defaultTemplate.copy() - - def addTemplate(self, template): - self.deck.modSchema() - self.templates.append(template) - # Copying ################################################## @@ -142,7 +132,7 @@ insert or replace into models values (?, ?, ?, ?, ?, ?, ?)""", t = "%s {%s}\n" % (prefix, t) return t - # Field basics + # Fields ################################################## def fieldMap(self): @@ -157,9 +147,6 @@ insert or replace into models values (?, ?, ?, ?, ?, ?, ?)""", self.conf['sortf'] = idx self.deck.updateFieldCache(self.fids(), csum=False) - # Adding/deleting/moving fields - ################################################## - def newField(self): return defaultField.copy() @@ -171,7 +158,7 @@ insert or replace into models values (?, ?, ?, ?, ?, ?, ?)""", return fields self._transformFields(add) - def deleteField(self, field): + def delField(self, field): idx = self.fields.index(field) self.fields.remove(field) self.flush() @@ -222,3 +209,27 @@ insert or replace into models values (?, ?, ?, ?, ?, ?, ?)""", r.append((joinFields(fn(splitFields(flds))), id)) self.deck.db.executemany("update facts set flds = ? where id = ?", r) self.deck.finishProgress() + + # Templates + ################################################## + + def newTemplate(self): + return defaultTemplate.copy() + + def addTemplate(self, template): + self.deck.modSchema() + self.templates.append(template) + + def delTemplate(self, template): + self.deck.modSchema() + ord = self.templates.index(template) + cids = self.deck.db.list(""" +select c.id from cards c, facts f where c.fid=f.id and mid = ? and ord = ?""", + self.id, ord) + self.deck.deleteCards(cids) + # shift ordinals + self.deck.db.execute(""" +update cards set ord = ord - 1 where fid in (select id from facts +where mid = ?) and ord > ?""", self.id, ord) + self.templates.remove(template) + self.flush() diff --git a/tests/test_models.py b/tests/test_models.py index 1fd1b286e..d40b4bcea 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -45,7 +45,7 @@ def test_fields(): m.renameField(f, "bar") assert d.getFact(m.fids()[0])['bar'] == '' # delete back - m.deleteField(m.fields[1]) + m.delField(m.fields[1]) assert d.getFact(m.fids()[0])._fields == ["1", ""] # move 0 -> 1 m.moveField(m.fields[0], 1) @@ -71,6 +71,24 @@ def test_fields(): m.moveField(m.fields[0], 1) assert d.getFact(m.fids()[0])._fields == ["", "2", "1"] +def test_templates(): + d = getEmptyDeck() + m = d.currentModel() + m.templates[1]['actv'] = True + m.flush() + f = d.newFact() + f['Front'] = u'1' + f['Back'] = u'2' + d.addFact(f) + assert d.cardCount() == 2 + # removing a template should delete its cards + m.delTemplate(m.templates[0]) + assert d.cardCount() == 1 + # and should have updated the other cards' ordinals + c = f.cards()[0] + assert c.ord == 0 + stripHTML(c.q()) == "2" + def test_modelChange(): print "model change" return