add deck vars

This commit is contained in:
Damien Elmes 2009-04-07 11:55:08 +09:00
parent aed9fb1c61
commit c7f9cec657
3 changed files with 37 additions and 0 deletions

View file

@ -49,6 +49,11 @@ REV_CARDS_RANDOM = 3
DECK_VERSION = 32
deckVarsTable = Table(
'deckVars', metadata,
Column('key', UnicodeText, nullable=False, primary_key=True),
Column('value', UnicodeText))
# parts of the code assume we only have one deck
decksTable = Table(
'decks', metadata,
@ -1833,6 +1838,21 @@ cardTags.tagId in %s""" % ids2str(ids)
return True
return False
# Meta vars
##########################################################################
def getInt(self, key):
ret = self.s.scalar("select value from deckVars where key = :k",
k=key)
if ret is not None:
ret = int(ret)
return ret
def setVar(self, key, value):
self.s.statement("insert or replace into deckVars (key, value) "
"values (:key, :value)", key=key, value=value)
self.flushMod()
# Failed card handling
##########################################################################

View file

@ -561,9 +561,16 @@ values
# these may be deleted before bundling
if 'models' in d: del d['models']
if 'currentModel' in d: del d['currentModel']
d['meta'] = self.realTuples(self.deck.s.all("select * from deckVars"))
return d
def updateDeck(self, deck):
meta = deck['meta']
for (k,v) in meta:
self.deck.s.statement("""
insert or replace into deckVars
(key, value) values (:k, :v)""", k=k, v=v)
del deck['meta']
self.applyDict(self.deck, deck)
self.deck.lastSync = self.deck.modified
self.deck.updateTagPriorities()

View file

@ -104,6 +104,13 @@ def test_localsync_deck():
assert dailyStats(deck2).reps == 1
assert globalStats(deck2).reps == 1
assert deck2.s.scalar("select count(*) from reviewHistory") == 1
# make sure meta data is synced
deck1.setVar("foo", 1)
assert deck1.getInt("foo") == 1
assert deck2.getInt("foo") is None
client.sync()
assert deck1.getInt("foo") == 1
assert deck2.getInt("foo") == 1
@nose.with_setup(setup_local, teardown)
def test_localsync_models():
@ -283,6 +290,9 @@ def test_remotesync_fromserver():
assert deck2.modified > deck1.modified
client.sync()
assert deck2.modified == deck1.modified
# test deck vars
deck1.setVar("foo", 1)
client.sync()
@nose.with_setup(setup_remote, teardown)
def test_remotesync_toserver():