def get_likes(user, items): if not user or not items: return {} keys = {} res = {} keys = dict((prequeued_vote_key(user, item), (user,item)) for item in items) r = g.cache.get_multi(keys.keys()) # populate the result set based on what we fetched from the cache first for k, v in r.iteritems(): res[keys[k]] = v # now hit the vote db with the remainder likes = Vote.likes(user, [i for i in items if (user, i) not in res]) for k, v in likes.iteritems(): res[k] = v._name # lastly, translate into boolean: for k in res.keys(): res[k] = (True if res[k] == '1' else False if res[k] == '-1' else None) return res
def get_likes(user, items): if not user or not items: return {} res = {} # check the prequeued_vote_keys keys = {} for item in items: if (user, item) in res: continue key = prequeued_vote_key(user, item) keys[key] = (user, item) if keys: r = g.cache.get_multi(keys.keys()) for key, v in r.iteritems(): res[keys[key]] = (True if v == '1' else False if v == '-1' else None) for item in items: # already retrieved above if (user, item) in res: continue # we can only vote on links and comments if not isinstance(item, (Link, Comment)): res[(user, item)] = None likes = Vote.likes(user, [i for i in items if (user, i) not in res]) res.update(likes) return res
def get_likes(user, items): if not user or not items: return {} res = {} # check the prequeued_vote_keys keys = {} for item in items: if (user, item) in res: continue key = prequeued_vote_key(user, item) keys[key] = (user, item) if keys: r = g.cache.get_multi(keys.keys()) for key, v in r.iteritems(): res[keys[key]] = (True if v == '1' else False if v == '-1' else None) # avoid requesting items that they can't have voted on (we're # still using the tdb_sql Thing API for this). TODO: we should do # this before the prequeued_vote_keys lookup, so that in extreme # cases we can avoid hitting the cache for them at all, but in the # current state that precludes brand new comments from appearing # to have been voted on for item in items: if (user, item) in res: continue # we can only vote on links and comments if isinstance(item, (Link, Comment)): rel = Vote.rel(user.__class__, item.__class__) if rel._can_skip_lookup(user, item): res[(user, item)] = None else: res[(user, item)] = None # now hit Cassandra with the remainder likes = Vote.likes(user, [i for i in items if (user, i) not in res]) res.update(likes) return res
def get_likes(user, items): if not user or not items: return {} keys = {} res = {} keys = dict( (prequeued_vote_key(user, item), (user, item)) for item in items) r = g.cache.get_multi(keys.keys()) # populate the result set based on what we fetched from the cache first for k, v in r.iteritems(): res[keys[k]] = v # now hit the vote db with the remainder likes = Vote.likes(user, [i for i in items if (user, i) not in res]) for k, v in likes.iteritems(): res[k] = v._name # lastly, translate into boolean: for k in res.keys(): res[k] = (True if res[k] == '1' else False if res[k] == '-1' else None) return res