def update_comment_votes(comments, write_consistency_level=None): from r2.models import CommentSortsCache, CommentScoresByLink comments = tup(comments) link_map = {} for com in comments: link_map.setdefault(com.link_id, []).append(com) all_links = Link._byID(link_map.keys(), data=True) comment_trees = {} for link in all_links.values(): comment_trees[link._id] = get_comment_tree(link) for link_id, coms in link_map.iteritems(): link = all_links[link_id] for sort in ("_controversy", "_hot", "_confidence", "_score", "_date", "_qa"): cid_tree = comment_trees[link_id].tree scores_by_comment = _comment_sorter_from_cids(coms, sort, link, cid_tree, by_36=True) # Cassandra always uses the id36 instead of the integer # ID, so we'll map that first before sending it c_key = sort_comments_key(link_id, sort) CommentSortsCache._set_values( c_key, scores_by_comment, write_consistency_level=write_consistency_level) CommentScoresByLink.set_scores(link, sort, scores_by_comment)
def update_comment_votes(comments, write_consistency_level = None): from r2.models import CommentSortsCache comments = tup(comments) link_map = {} for com in comments: link_map.setdefault(com.link_id, []).append(com) all_links = Link._byID(link_map.keys(), data=True) comment_trees = {} for link in all_links.values(): comment_trees[link._id] = get_comment_tree(link) for link_id, coms in link_map.iteritems(): link = all_links[link_id] for sort in ("_controversy", "_hot", "_confidence", "_score", "_date", "_qa"): cid_tree = comment_trees[link_id].tree sorter = _comment_sorter_from_cids(coms, sort, link, cid_tree, by_36=True) # Cassandra always uses the id36 instead of the integer # ID, so we'll map that first before sending it c_key = sort_comments_key(link_id, sort) CommentSortsCache._set_values(c_key, sorter, write_consistency_level = write_consistency_level)
def update_comment_votes(comments, write_consistency_level=None): from r2.models import CommentSortsCache comments = tup(comments) link_map = {} for com in comments: link_map.setdefault(com.link_id, []).append(com) for link_id, coms in link_map.iteritems(): for sort in ("_controversy", "_hot", "_confidence", "_score", "_date"): # Cassandra always uses the id36 instead of the integer # ID, so we'll map that first before sending it c_key = sort_comments_key(link_id, sort) c_r = dict((cm._id36, _get_sort_value(cm, sort)) for cm in coms) CommentSortsCache._set_values(c_key, c_r, write_consistency_level=write_consistency_level)
def _get_comment_sorter(link_id, sort): """Retrieve cached sort values for all comments on a post. Arguments: * link_id -- id of the Link containing the comments. * sort -- a string indicating the attribute on the comments to use for generating sort values. Returns a dictionary from cid to a numeric sort value. """ from r2.models import CommentSortsCache from r2.lib.db.tdb_cassandra import NotFound key = sort_comments_key(link_id, sort) try: sorter = CommentSortsCache._byID(key)._values() except NotFound: return {} # we store these id36ed, but there are still bits of the code that # want to deal in integer IDs sorter = dict((int(c_id, 36), val) for (c_id, val) in sorter.iteritems()) return sorter
def update_comment_votes(comments, write_consistency_level=None): from r2.models import CommentSortsCache comments = tup(comments) link_map = {} for com in comments: link_map.setdefault(com.link_id, []).append(com) for link_id, coms in link_map.iteritems(): for sort in ("_controversy", "_hot", "_confidence", "_score", "_date"): # Cassandra always uses the id36 instead of the integer # ID, so we'll map that first before sending it c_key = sort_comments_key(link_id, sort) c_r = dict((cm._id36, _get_sort_value(cm, sort)) for cm in coms) CommentSortsCache._set_values( c_key, c_r, write_consistency_level=write_consistency_level)
def _get_comment_sorter(link_id, sort): from r2.models import CommentSortsCache from r2.lib.db.tdb_cassandra import NotFound key = sort_comments_key(link_id, sort) try: sorter = CommentSortsCache._byID(key)._values() except NotFound: return {} # we store these id36ed, but there are still bits of the code that # want to deal in integer IDs sorter = dict((int(c_id, 36), val) for (c_id, val) in sorter.iteritems()) return sorter