示例#1
0
def get_leaderboard(request):
    """
    Get leaderboard entries - Used in ajax view on leaderboards page
    """
    activity = request.GET.get('activity')
    timespan = request.GET.get('timespan')

    leaderboard_key = 'type_{0}:timespan_{1}'.format(activity, timespan)

    leaderboard_meta_key = '{0}:meta'.format(leaderboard_key)
    leaderboard_db = keyval.get_db(keyval.TYPE_LEADERBOARD)

    offset = 0
    limit = 20
    user_ids = leaderboard_db.zrevrange(leaderboard_key, offset, offset + limit)
    entries = leaderboard_db.hmget(leaderboard_meta_key, *user_ids)
    leaderboard_count = leaderboard_db.zcard(leaderboard_key)

    context = {'entries': [], 'total_count': leaderboard_count}
    for stringy_dict_entry in entries:
        entry = ast.literal_eval(stringy_dict_entry)
        entry['is_authd_user'] = entry['user_id'] == request.user.id
        context['entries'].append(entry)

    response = render_to_string('leaderboard.html', context)

    return HttpResponse(response, content_type='text/html')
示例#2
0
def get_leaderboard_leader(activity_type, all_time=False, year=None, month=None):
    """
    Return the user id in the top spot of a leaderboard
    """
    leaderboard_key = build_leaderboard_key(activity_type, all_time, year, month)

    leaderboard_db = keyval.get_db(keyval.TYPE_LEADERBOARD)
    user_id = leaderboard_db.zrevrange(leaderboard_key, 0, 0)[0]
    return int(user_id)
示例#3
0
def get_leaderboard_count(activity_type, all_time=False, year=None, month=None):
    """
    Get the number of users on a leaderboard
    """
    leaderboard_key = build_leaderboard_key(activity_type, all_time, year, month)

    leaderboard_db = keyval.get_db(keyval.TYPE_LEADERBOARD)
    count = leaderboard_db.zcard(leaderboard_key)
    return count
示例#4
0
def get_user_rank(user_id, activity_type, all_time=False, year=None, month=None):
    """
    Get a user's rank on a leaderboard
    """
    leaderboard_key = build_leaderboard_key(activity_type, all_time, year, month)

    leaderboard_db = keyval.get_db(keyval.TYPE_LEADERBOARD)
    rank = leaderboard_db.zrevrank(leaderboard_key, user_id)
    return rank
示例#5
0
def get_user_score(user_id, activity_type, all_time=False, year=None, month=None):
    """
    Get a user's score on a leaderboard
    """
    leaderboard_key = build_leaderboard_key(activity_type, all_time, year, month)

    leaderboard_db = keyval.get_db(keyval.TYPE_LEADERBOARD)
    score = leaderboard_db.zscore(leaderboard_key, user_id)
    if score is not None:
        score = int(score)
    return score
示例#6
0
def create_or_update_entry(points, user, activity_type, all_time=False, year=None, month=None):
    """
    Create or Update a leaderboard entry in Redis
    """
    leaderboard_key = build_leaderboard_key(activity_type, all_time, year, month)

    leaderboard_meta_key = '{0}:meta'.format(leaderboard_key)
    leaderboard_db = keyval.get_db(keyval.TYPE_LEADERBOARD)

    name = '{0} {1}'.format(user.first_name, user.last_name).strip()
    meta = {
        'name': name,
        'user_id': user.id,
        'points': points,
    }

    leaderboard_db.hset(leaderboard_meta_key, user.id, meta)
    leaderboard_db.zadd(leaderboard_key, points, user.id)