def karma(self, kind, sr = None): from subreddit import Subreddit suffix = '_' + kind + '_karma' #if no sr, return the sum if sr is None: total = 0 for k, v in self._t.iteritems(): if k.endswith(suffix): if kind == 'link': try: karma_sr_name = k[0:k.rfind(suffix)] karma_sr = Subreddit._by_name(karma_sr_name) multiplier = karma_sr.post_karma_multiplier except NotFound: multiplier = 1 else: multiplier = 1 total += v * multiplier return total else: try: return getattr(self, sr.name + suffix) except AttributeError: #if positive karma elsewhere, you get min_up_karma if self.karma(kind) > 0: return g.MIN_UP_KARMA else: return 0
def karma(self, kind, sr=None): from subreddit import Subreddit suffix = "_" + kind + "_karma" # if no sr, return the sum if sr is None: total = 0 for k, v in self._t.iteritems(): if k.endswith(suffix): if kind == "link": try: karma_sr_name = k[0 : k.rfind(suffix)] karma_sr = Subreddit._by_name(karma_sr_name) multiplier = karma_sr.post_karma_multiplier except NotFound: multiplier = 1 else: multiplier = 1 total += v * multiplier return total else: try: return getattr(self, sr.name + suffix) except AttributeError: # if positive karma elsewhere, you get min_up_karma if self.karma(kind) > 0: return g.MIN_UP_KARMA else: return 0
def karma_ups_downs(self, kind, sr=None): # NOTE: There is a legacy inconsistency in this method. If no subreddit # is specified, karma from all subreddits will be totaled, with each # scaled according to its karma multiplier before being summed. But if # a subreddit IS specified, the return value will NOT be scaled. assert kind in ('link', 'comment', 'adjustment') from subreddit import Subreddit # prevent circular import # If getting karma for a single sr, it's easy if sr is not None: ups = getattr(self, 'karma_ups_{0}_{1}'.format(kind, sr.name), 0) downs = getattr(self, 'karma_downs_{0}_{1}'.format(kind, sr.name), 0) return (ups, downs) # Otherwise, loop through attributes and sum all karmas totals = [0, 0] for k, v in self._t.iteritems(): for pre, idx in (('karma_ups_' + kind + '_', 0), ('karma_downs_' + kind + '_', 1)): if k.startswith(pre): karma_sr_name = k[len(pre):] index = idx break else: continue multiplier = 1 if kind == 'link': try: karma_sr = Subreddit._by_name(karma_sr_name) multiplier = karma_sr.post_karma_multiplier except NotFound: pass totals[index] += v * multiplier return tuple(totals)
def karma_ups_downs(self, kind, sr = None): # NOTE: There is a legacy inconsistency in this method. If no subreddit # is specified, karma from all subreddits will be totaled, with each # scaled according to its karma multiplier before being summed. But if # a subreddit IS specified, the return value will NOT be scaled. assert kind in ('link', 'comment', 'adjustment') from subreddit import Subreddit # prevent circular import # If getting karma for a single sr, it's easy if sr is not None: ups = getattr(self, 'karma_ups_{0}_{1}'.format(kind, sr.name), 0) downs = getattr(self, 'karma_downs_{0}_{1}'.format(kind, sr.name), 0) return (ups, downs) # Otherwise, loop through attributes and sum all karmas totals = [0, 0] for k, v in self._t.iteritems(): for pre, idx in (('karma_ups_' + kind + '_', 0), ('karma_downs_' + kind + '_', 1)): if k.startswith(pre): karma_sr_name = k[len(pre):] index = idx break else: continue multiplier = 1 if kind == 'link': try: karma_sr = Subreddit._by_name(karma_sr_name) multiplier = karma_sr.post_karma_multiplier except NotFound: pass totals[index] += v * multiplier return tuple(totals)