From 13489508755016f82ce2d82165a1843f4e1f0b30 Mon Sep 17 00:00:00 2001 From: David Snopek Date: Wed, 24 Jul 2013 17:06:08 +0100 Subject: [PATCH] Attempt to allow the user to configure the scheduler. --- AnkiServer/apps/rest_app.py | 34 +++++++++++++++++++++++++++++++++- tests/test_rest_app.py | 24 ++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/AnkiServer/apps/rest_app.py b/AnkiServer/apps/rest_app.py index cc8edc9..e7547f7 100644 --- a/AnkiServer/apps/rest_app.py +++ b/AnkiServer/apps/rest_app.py @@ -353,9 +353,23 @@ class CollectionHandler(RestHandlerBase): # SCHEDULER - Controls card review, ie. intervals, what cards are due, answering a card, etc. # - @noReturnValue def reset_scheduler(self, col, req): + if req.data.has_key('deck'): + deck = DeckHandler._get_deck(col, req.data['deck']) + col.decks.select(deck['id']) + col.sched.reset() + counts = col.sched.counts() + return { + 'new_cards': counts[0], + 'learning_cards': counts[1], + 'review_cards': counts[1], + } + + def extend_scheduler_limits(self, col, req): + new_cards = int(req.data.get('new_cards', 0)) + review_cards = int(req.data.get('review_cards', 0)) + col.sched.extendLimits(new_cards, review_cards) button_labels = ['Easy', 'Good', 'Hard'] @@ -548,6 +562,9 @@ class DeckHandler(RestHandlerBase): raise HTTPNotFound('No deck with id or name: ' + str(val)) return deck + + def index(self, col, req): + return self._get_deck(col, req.ids[1]) def next_card(self, col, req): req_copy = req.copy() @@ -557,6 +574,21 @@ class DeckHandler(RestHandlerBase): # forward this to the CollectionHandler return req.app.execute_handler('collection', 'next_card', col, req_copy) + def get_conf(self, col, req): + # TODO: should probably live in a ConfHandler + return col.decks.confForDid(req.ids[1]) + + @noReturnValue + def set_update_conf(self, col, req): + data = req.data.copy() + del data['id'] + + conf = col.decks.confForDid(req.ids[1]) + conf = conf.copy() + conf.update(data) + + col.decks.updateConf(conf) + class CardHandler(RestHandlerBase): """Default handler group for 'card' type.""" diff --git a/tests/test_rest_app.py b/tests/test_rest_app.py index 8f3e45e..62af9cc 100644 --- a/tests/test_rest_app.py +++ b/tests/test_rest_app.py @@ -265,6 +265,16 @@ class CollectionHandlerTest(CollectionTestBase): # return everything to normal! anki.lang.setLang('en') + def test_reset_scheduler(self): + self.add_default_note(3) + + ret = self.execute('reset_scheduler', {'deck': 'Default'}) + self.assertEqual(ret, { + 'new_cards': 3, + 'learning_cards': 0, + 'review_cards': 0, + }) + def test_next_card(self): ret = self.execute('next_card', {}) self.assertEqual(ret, None) @@ -488,6 +498,13 @@ class DeckHandlerTest(CollectionTestBase): req = RestHandlerRequest(self.mock_app, data, ids, {}) return func(self.collection, req) + def test_index(self): + ret = self.execute('index', {}) + #pprint(ret) + self.assertEqual(ret['name'], 'Default') + self.assertEqual(ret['id'], 1) + self.assertEqual(ret['dyn'], False) + def test_next_card(self): self.mock_app.execute_handler.return_value = None @@ -495,6 +512,13 @@ class DeckHandlerTest(CollectionTestBase): self.assertEqual(ret, None) self.mock_app.execute_handler.assert_called_with('collection', 'next_card', self.collection, RestHandlerRequest(self.mock_app, {'deck': '1'}, ['collection_name'], {})) + def test_get_conf(self): + ret = self.execute('get_conf', {}) + #pprint(ret) + self.assertEqual(ret['name'], 'Default') + self.assertEqual(ret['id'], 1) + self.assertEqual(ret['dyn'], False) + class CardHandlerTest(CollectionTestBase): def setUp(self): super(CardHandlerTest, self).setUp()