Implemented 'create_dynamic_deck' for custom study options.
This commit is contained in:
parent
46dab1c612
commit
3fe1e0eb06
@ -14,6 +14,7 @@ except ImportError:
|
|||||||
|
|
||||||
import os, logging
|
import os, logging
|
||||||
|
|
||||||
|
import anki.consts
|
||||||
import anki.lang
|
import anki.lang
|
||||||
from anki.lang import _ as t
|
from anki.lang import _ as t
|
||||||
|
|
||||||
@ -336,6 +337,48 @@ class CollectionHandler(RestHandlerBase):
|
|||||||
def select_deck(self, col, req):
|
def select_deck(self, col, req):
|
||||||
col.decks.select(req.data['deck_id'])
|
col.decks.select(req.data['deck_id'])
|
||||||
|
|
||||||
|
dyn_modes = {
|
||||||
|
'random': anki.consts.DYN_RANDOM,
|
||||||
|
'added': anki.consts.DYN_ADDED,
|
||||||
|
'due': anki.consts.DYN_DUE,
|
||||||
|
}
|
||||||
|
|
||||||
|
def create_dynamic_deck(self, col, req):
|
||||||
|
name = req.data.get('name', t('Custom Study Session'))
|
||||||
|
deck = col.decks.byName(name)
|
||||||
|
if deck:
|
||||||
|
if not deck['dyn']:
|
||||||
|
raise HTTPBadRequest("There is an existing non-dynamic deck with the name %s" % name)
|
||||||
|
|
||||||
|
# safe to empty it because it's a dynamic deck
|
||||||
|
# TODO: maybe this should be an option?
|
||||||
|
col.sched.emptyDyn(deck['id'])
|
||||||
|
else:
|
||||||
|
deck = col.decks.get(col.decks.newDyn(name))
|
||||||
|
|
||||||
|
query = req.data.get('query', '')
|
||||||
|
count = req.data.get('count', 100)
|
||||||
|
mode = req.data.get('mode', 'random')
|
||||||
|
|
||||||
|
try:
|
||||||
|
mode = self.dyn_modes[mode]
|
||||||
|
except KeyError:
|
||||||
|
raise HTTPBadRequest("Unknown mode: %s" % mode)
|
||||||
|
|
||||||
|
deck['terms'][0] = [query, count, mode]
|
||||||
|
|
||||||
|
if mode != anki.consts.DYN_RANDOM:
|
||||||
|
deck['resched'] = True
|
||||||
|
else:
|
||||||
|
deck['resched'] = False
|
||||||
|
|
||||||
|
if not col.sched.rebuildDyn(deck['id']):
|
||||||
|
raise HTTPBadRequest("No cards matched the criteria you provided")
|
||||||
|
|
||||||
|
col.decks.save(deck)
|
||||||
|
|
||||||
|
return deck
|
||||||
|
|
||||||
#
|
#
|
||||||
# CARD - A specific card in a deck with a history of review (generated from
|
# CARD - A specific card in a deck with a history of review (generated from
|
||||||
# a note based on the template).
|
# a note based on the template).
|
||||||
|
|||||||
@ -179,6 +179,22 @@ class CollectionHandlerTest(CollectionTestBase):
|
|||||||
ret = self.execute('select_deck', data)
|
ret = self.execute('select_deck', data)
|
||||||
self.assertEqual(ret, None);
|
self.assertEqual(ret, None);
|
||||||
|
|
||||||
|
def test_create_dynamic_deck_simple(self):
|
||||||
|
self.add_default_note(5)
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'name': 'Dyn deck',
|
||||||
|
'mode': 'random',
|
||||||
|
'count': 2,
|
||||||
|
'query': "deck:\"Default\" (tag:'Tag1' or tag:'Tag2') (-tag:'Tag3')",
|
||||||
|
}
|
||||||
|
ret = self.execute('create_dynamic_deck', data)
|
||||||
|
self.assertEqual(ret['name'], 'Dyn deck')
|
||||||
|
self.assertEqual(ret['dyn'], True)
|
||||||
|
|
||||||
|
cards = self.collection.findCards('deck:"Dyn deck"')
|
||||||
|
self.assertEqual(len(cards), 2)
|
||||||
|
|
||||||
def test_list_models(self):
|
def test_list_models(self):
|
||||||
data = {}
|
data = {}
|
||||||
ret = self.execute('list_models', data)
|
ret = self.execute('list_models', data)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user