diff --git a/r2/r2/controllers/apiv1.py b/r2/r2/controllers/apiv1.py index 33747737ed..6df1b8bc97 100644 --- a/r2/r2/controllers/apiv1.py +++ b/r2/r2/controllers/apiv1.py @@ -33,6 +33,7 @@ IdentityJsonTemplate, PrefsJsonTemplate, TrophyListJsonTemplate, + KarmaListJsonTemplate, ) from r2.lib.validator import ( validate, @@ -122,6 +123,18 @@ def GET_trophies(self): """Return a list of trophies for the current user.""" return self._get_usertrophies(c.oauth_user) + @require_oauth2_scope("mysubreddits") + @api_doc( + section=api_section.account, + uri='/api/v1/me/karma', + extensions=['json'], + ) + def GET_karma(self): + """Return a breakdown of subreddit karma.""" + karmas = c.oauth_user.all_karmas(include_old=False) + resp = KarmaListJsonTemplate().render(karmas) + return self.api_wrapper(resp.finalize()) + PREFS_JSON_VALIDATOR = VValidatedJSON("json", PREFS_JSON_SPEC, body=True) diff --git a/r2/r2/lib/jsontemplates.py b/r2/r2/lib/jsontemplates.py index 53f09fda7a..6f12406c74 100755 --- a/r2/r2/lib/jsontemplates.py +++ b/r2/r2/lib/jsontemplates.py @@ -1032,6 +1032,18 @@ class PolicyViewJsonTemplate(ThingJsonTemplate): def kind(self, wrapped): return "Policy" +class KarmaListJsonTemplate(ThingJsonTemplate): + def data(self, karmas): + karmas = [{ + 'sr': label, + 'link_karma': lc, + 'comment_karma': cc, + } for label, title, lc, cc in karmas] + return karmas + + def kind(self, wrapped): + return "KarmaList" + class TrophyJsonTemplate(ThingJsonTemplate): _data_attrs_ = dict( award_id="award._id36", diff --git a/r2/r2/models/account.py b/r2/r2/models/account.py index 7166440235..62294cfd52 100644 --- a/r2/r2/models/account.py +++ b/r2/r2/models/account.py @@ -197,7 +197,7 @@ def safe_karma(self): karma = self.link_karma return max(karma, 1) if karma > -1000 else karma - def all_karmas(self): + def all_karmas(self, include_old=True): """returns a list of tuples in the form (name, hover-text, link_karma, comment_karma)""" link_suffix = '_link_karma' @@ -218,7 +218,7 @@ def all_karmas(self): old_link_karma = self._t.get('link_karma', 0) old_comment_karma = self._t.get('comment_karma', 0) - if old_link_karma or old_comment_karma: + if include_old and (old_link_karma or old_comment_karma): karmas.append((_('ancient history'), _('really obscure karma from before it was cool to track per-subreddit'), old_link_karma, old_comment_karma))