コード例 #1
0
ファイル: queries.py プロジェクト: sjuxax/reddit
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
コード例 #2
0
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
コード例 #3
0
ファイル: queries.py プロジェクト: rram/reddit
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
コード例 #4
0
ファイル: queries.py プロジェクト: tjr1351/reddit
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
コード例 #5
0
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