Serialize more of the card object.

This commit is contained in:
David Snopek 2013-07-17 17:34:34 +01:00
parent 9deb84c6a6
commit 59f8171798
2 changed files with 40 additions and 5 deletions

View File

@ -3,6 +3,8 @@ from webob.dec import wsgify
from webob.exc import * from webob.exc import *
from webob import Response from webob import Response
#from pprint import pprint
try: try:
import simplejson as json import simplejson as json
from simplejson import JSONDecodeError from simplejson import JSONDecodeError
@ -405,6 +407,18 @@ class DeckHandler(RestHandlerBase):
button_labels = ['Easy', 'Good', 'Hard'] button_labels = ['Easy', 'Good', 'Hard']
def _get_deck(self, col, ids):
try:
did = long(ids[1])
deck = col.decks.get(did, False)
except ValueError:
deck = col.decks.byName(ids[1])
if deck is None:
raise HTTPNotFound('No deck with id or name: ' + str(ids[1]))
return deck
# Code stolen from aqt/reviewer.py # Code stolen from aqt/reviewer.py
def _get_answer_buttons(self, col, card): def _get_answer_buttons(self, col, card):
l = [] l = []
@ -420,9 +434,9 @@ class DeckHandler(RestHandlerBase):
return [(ease, label, col.sched.nextIvl(card, ease)) for ease, label in enumerate(l, 1)] return [(ease, label, col.sched.nextIvl(card, ease)) for ease, label in enumerate(l, 1)]
def next_card(self, col, data, ids): def next_card(self, col, data, ids):
deck_id = ids[1] deck = self._get_deck(col, ids)
col.decks.select(deck_id) col.decks.select(deck['id'])
card = col.sched.getCard() card = col.sched.getCard()
if card is None: if card is None:
return None return None
@ -438,9 +452,26 @@ class CardHandler(RestHandlerBase):
@staticmethod @staticmethod
def _serialize(card): def _serialize(card):
d = { d = {
'id': card.id 'id': card.id,
'isEmpty': card.isEmpty(),
'question': card.q(),
'answer': card.a(),
'did': card.did,
'due': card.due,
'factor': card.factor,
'ivl': card.ivl,
'lapses': card.lapses,
'left': card.left,
'mod': card.mod,
'nid': card.nid,
'odid': card.odid,
'odue': card.odue,
'ord': card.ord,
'queue': card.queue,
'reps': card.reps,
'type': card.type,
'usn': card.usn,
} }
# TODO: do more stuff!
return d return d
# Our entry point # Our entry point

View File

@ -323,12 +323,16 @@ class DeckHandlerTest(CollectionTestBase):
} }
self.add_note(note) self.add_note(note)
# get the id for the one card on this collection # get the id for the one card and note on this collection
note_id = self.collection.findNotes('')[0]
card_id = self.collection.findCards('')[0] card_id = self.collection.findCards('')[0]
self.collection.sched.reset() self.collection.sched.reset()
ret = self.execute('next_card', {}) ret = self.execute('next_card', {})
self.assertEqual(ret['id'], card_id) self.assertEqual(ret['id'], card_id)
self.assertEqual(ret['nid'], note_id)
self.assertEqual(ret['question'], '<style>.card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n</style>The front')
self.assertEqual(ret['answer'], '<style>.card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n</style>The front\n\n<hr id=answer>\n\nThe back')
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()