From a8905a4c22a6c4feb77c7064b37eba95e66ab9bc Mon Sep 17 00:00:00 2001 From: Austin Siew <17107540+Aquafina-water-bottle@users.noreply.github.com> Date: Tue, 20 Sep 2022 17:46:26 -0600 Subject: [PATCH] getReviewsOfCards: changed inner lists into dictionaries, removed cid within the inner list --- README.md | 41 +++++++++++++++++++++++++++++++++++------ plugin/__init__.py | 16 +++++++++------- tests/test_stats.py | 15 ++++++++++++++- 3 files changed, 58 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 0b1d036..7516ac7 100644 --- a/README.md +++ b/README.md @@ -2767,8 +2767,21 @@ corresponding to when the API was available for use. * **getReviewsOfCards** Requests all card reviews for each card ID. - Returns a dictionary mapping the card ID to 9-tuples in the same format as `cardReviews`: - `(reviewTime, cardID, usn, buttonPressed, newInterval, previousInterval, newFactor, reviewDuration, reviewType)` + Returns a dictionary mapping each card ID to a list of dictionaries of the format: + ``` + { + "id": reviewTime, + "usn": usn, + "ease": buttonPressed, + "ivl": newInterval, + "lastIvl": previousInterval, + "factor": newFactor, + "time": reviewDuration, + "type": reviewType, + } + ``` + The reason why these key values are used instead of the more descriptive counterparts + is because these are the exact key values used in Anki's database. *Sample request*: ```json @@ -2788,10 +2801,26 @@ corresponding to when the API was available for use. { "result": { "1653613948202": [ - [1654102387663, 1653613948202, 1780, 3, 8, 3, 2500, 25796, 1], - [1654798974478, 1653613948202, 1861, 3, 20, 8, 2500, 18134, 1], - [1656556319328, 1653613948202, 2075, 3, 53, 20, 2500, 20530, 1], - [1661107990069, 1653613948202, 2478, 3, 131, 53, 2500, 24247, 1] + { + "id": 1653772912146, + "usn": 1750, + "ease": 1, + "ivl": -20, + "lastIvl": -20, + "factor": 0, + "time": 38192, + "type": 0 + }, + { + "id": 1653772965429, + "usn": 1750, + "ease": 3, + "ivl": -45, + "lastIvl": -20, + "factor": 0, + "time": 15337, + "type": 0 + } ] }, "error": null diff --git a/plugin/__init__.py b/plugin/__init__.py index edadf4b..e61e710 100644 --- a/plugin/__init__.py +++ b/plugin/__init__.py @@ -1375,13 +1375,15 @@ class AnkiConnect: @util.api() def getReviewsOfCards(self, cards): - return { - card: self.database().all( - "select id, cid, usn, ease, ivl, lastIvl, factor, time, type from revlog where cid = ?", - card, - ) - for card in cards - } + COLUMNS = ['id', 'usn', 'ease', 'ivl', 'lastIvl', 'factor', 'time', 'type'] + QUERY = 'select {} from revlog where cid = ?'.format(', '.join(COLUMNS)) + + result = {} + for card in cards: + query_result = self.database().all(QUERY, card) + result[card] = [dict(zip(COLUMNS, row)) for row in query_result] + + return result diff --git a/tests/test_stats.py b/tests/test_stats.py index d3e94fd..6cf16df 100755 --- a/tests/test_stats.py +++ b/tests/test_stats.py @@ -30,4 +30,17 @@ class TestReviews: assert len(ac.cardReviews(deck="test_deck", startID=0)) == 2 assert ac.getLatestReviewID(deck="test_deck") == 789 assert ac.getReviewsOfCards(cards=[setup.card_ids[0]]) == \ - {setup.card_ids[0]: [[456, setup.card_ids[0], -1, 3, 4, -60, 2500, 6157, 0]]} + { + setup.card_ids[0]: [ + { + "id": 456, + "usn": -1, + "ease": 3, + "ivl": 4, + "lastIvl": -60, + "factor": 2500, + "time": 6157, + "type": 0, + } + ] + }