fact.model -> fact.model()

This commit is contained in:
Damien Elmes 2011-03-13 18:37:21 +09:00
parent 870c80e076
commit f96a495b53
4 changed files with 22 additions and 20 deletions

View file

@ -229,14 +229,15 @@ select id from facts where id not in (select distinct fid from cards)""")
def findTemplates(self, fact, checkActive=True): def findTemplates(self, fact, checkActive=True):
"Return (active), non-empty templates." "Return (active), non-empty templates."
ok = [] ok = []
for template in fact.model.templates: model = fact.model()
for template in model.templates:
if template['actv'] or not checkActive: if template['actv'] or not checkActive:
# [cid, fid, mid, gid, ord, tags, flds, data] # [cid, fid, mid, gid, ord, tags, flds, data]
data = [1, 1, fact.model.id, 1, template['ord'], data = [1, 1, model.id, 1, template['ord'],
"", fact.joinedFields(), ""] "", fact.joinedFields(), ""]
now = self._renderQA(fact.model, "", data) now = self._renderQA(model, "", data)
data[6] = "\x1f".join([""]*len(fact._fields)) data[6] = "\x1f".join([""]*len(fact._fields))
empty = self._renderQA(fact.model, "", data) empty = self._renderQA(model, "", data)
if now['q'] == empty['q']: if now['q'] == empty['q']:
continue continue
if not template['emptyAns']: if not template['emptyAns']:
@ -277,7 +278,7 @@ select id from facts where id not in (select distinct fid from cards)""")
elif type == 1: elif type == 1:
cms = [c.template() for c in fact.cards()] cms = [c.template() for c in fact.cards()]
else: else:
cms = fact.model.templates cms = fact.model().templates
if not cms: if not cms:
return [] return []
cards = [] cards = []

View file

@ -17,14 +17,14 @@ class Fact(object):
self.load() self.load()
else: else:
self.id = None self.id = None
self.model = model self._model = model
self.mid = model.id self.mid = model.id
self.crt = intTime() self.crt = intTime()
self.mod = self.crt self.mod = self.crt
self.tags = "" self.tags = ""
self._fields = [""] * len(self.model.fields) self._fields = [""] * len(self._model.fields)
self.data = "" self.data = ""
self._fmap = self.model.fieldMap() self._fmap = self._model.fieldMap()
def load(self): def load(self):
(self.mid, (self.mid,
@ -35,12 +35,12 @@ class Fact(object):
self.data) = self.deck.db.first(""" self.data) = self.deck.db.first("""
select mid, crt, mod, tags, flds, data from facts where id = ?""", self.id) select mid, crt, mod, tags, flds, data from facts where id = ?""", self.id)
self._fields = splitFields(self._fields) self._fields = splitFields(self._fields)
self.model = self.deck.getModel(self.mid) self._model = self.deck.getModel(self.mid)
def flush(self): def flush(self):
self.mod = intTime() self.mod = intTime()
# facts table # facts table
sfld = self._fields[self.model.sortIdx()] sfld = self._fields[self._model.sortIdx()]
res = self.deck.db.execute(""" res = self.deck.db.execute("""
insert or replace into facts values (?, ?, ?, ?, ?, ?, ?, ?)""", insert or replace into facts values (?, ?, ?, ?, ?, ?, ?, ?)""",
self.id, self.mid, self.crt, self.id, self.mid, self.crt,
@ -70,7 +70,7 @@ insert or replace into facts values (?, ?, ?, ?, ?, ?, ?, ?)""",
"select id from cards where fid = ? order by id", self.id)] "select id from cards where fid = ? order by id", self.id)]
def model(self): def model(self):
return self.deck.getModel(self.mid) return self._model
# Dict interface # Dict interface
################################################## ##################################################

View file

@ -9,7 +9,7 @@ def test_genCards():
f['Front'] = u'1' f['Front'] = u'1'
f['Back'] = u'2' f['Back'] = u'2'
deck.addFact(f) deck.addFact(f)
cards = deck.genCards(f, f.model.templates, 1) cards = deck.genCards(f, f.model().templates, 1)
assert len(cards) == 1 assert len(cards) == 1
assert cards[0].ord == 1 assert cards[0].ord == 1
assert deck.cardCount() == 2 assert deck.cardCount() == 2
@ -20,7 +20,7 @@ def test_genCards():
f['Front'] = u'1' f['Front'] = u'1'
f['Back'] = u'2' f['Back'] = u'2'
deck.addFact(f) deck.addFact(f)
cards = deck.genCards(f, f.model.templates, 1) cards = deck.genCards(f, f.model().templates, 1)
assert deck.cardCount() == 4 assert deck.cardCount() == 4
c = deck.db.list("select due from cards where fid = ?", f.id) c = deck.db.list("select due from cards where fid = ?", f.id)
assert c[0] == c[1] assert c[0] == c[1]

View file

@ -51,7 +51,7 @@ def test_factAddDelete():
# try with two cards # try with two cards
f = deck.newFact() f = deck.newFact()
f['Front'] = u"one"; f['Back'] = u"two" f['Front'] = u"one"; f['Back'] = u"two"
m = f.model m = f.model()
m.templates[1]['actv'] = True m.templates[1]['actv'] = True
m.flush() m.flush()
n = deck.addFact(f) n = deck.addFact(f)
@ -64,7 +64,7 @@ def test_factAddDelete():
assert not p assert not p
# now let's make a duplicate and test uniqueness # now let's make a duplicate and test uniqueness
f2 = deck.newFact() f2 = deck.newFact()
f2.model.fields[1]['req'] = True f2.model().fields[1]['req'] = True
f2['Front'] = u"one"; f2['Back'] = u"" f2['Front'] = u"one"; f2['Back'] = u""
p = f2.problems() p = f2.problems()
assert p[0] == "unique" assert p[0] == "unique"
@ -100,15 +100,16 @@ def test_fieldChecksum():
assert deck.db.scalar( assert deck.db.scalar(
"select csum from fsums") == int("4b0e5a4c", 16) "select csum from fsums") == int("4b0e5a4c", 16)
# turning off unique and modifying the fact should delete the sum # turning off unique and modifying the fact should delete the sum
f.model.fields[0]['uniq'] = False m = f.model()
f.model.flush() m.fields[0]['uniq'] = False
m.flush()
f.flush() f.flush()
assert deck.db.scalar( assert deck.db.scalar(
"select count() from fsums") == 0 "select count() from fsums") == 0
# and turning on both should ensure two checksums generated # and turning on both should ensure two checksums generated
f.model.fields[0]['uniq'] = True m.fields[0]['uniq'] = True
f.model.fields[1]['uniq'] = True m.fields[1]['uniq'] = True
f.model.flush() m.flush()
f.flush() f.flush()
assert deck.db.scalar( assert deck.db.scalar(
"select count() from fsums") == 2 "select count() from fsums") == 2