Source code for tahrir.views.leaderboard

import tahrir_api.model as m
from flask import g, jsonify, request

from tahrir.utils.user import get_person

from . import blueprint as bp


[docs] @bp.route("/leaderboard/json") @bp.route("/leaderboard/<user_id>/json") def leaderboard_json(user_id=None): """Render a top-users JSON dump.""" limit = int(request.args.get("limit", 25)) user = None if user_id: user = get_person(user_id) query = ( g.tahrirdb.session.query(m.Person) .order_by( m.Person.rank, m.Person.created_on, ) .filter(m.Person.opt_out.is_(False)) ) leaderboard = query.filter(m.Person.rank.isnot(None)).all() # Get total user count. # user_count = len(leaderboard) leaderboard.extend(query.filter(m.Person.rank.is_(None)).all()) user_to_rank = g.tahrirdb.make_leaderboard() if user: rank = user.rank or 0 idx = rank - 1 # Handle the case of leaderboard[-2:2] which will be [] always. if idx < 2: idx = 2 leaderboard = leaderboard[(idx - 2) : (idx + 3)] else: leaderboard = leaderboard[:limit] ret = [ {**user_to_rank[p], **{"nickname": p.nickname}} for p in leaderboard if p in user_to_rank ] return jsonify({"leaderboard": ret})