def get(self, uid=None): username = self.get_current_user() if username is None: self.validate_user() return user = User.get_user(username) if user.permission_level < constants.PERMISSION_LEVEL_USER: self.render("denied.html", user=user) return if uid is None: self.render("leaderboard.html", user=user) else: target_user = User.by_id(int(uid)) self.render("user-details.html", user=user, target_user=target_user)
def get(self, user1, user2, summary=False): username = self.get_current_user() if username is None: self.validate_user() return user = User.get_user(username) if user.permission_level < constants.PERMISSION_LEVEL_USER: self.render("denied.html", user=user) return if not (user1 and user2): raise ValueError("Two users are required") user1 = User.by_id(user1) user2 = User.by_id(user2) # query items raw_range = self.request.headers.get('Range', '') m = range_expression.match(raw_range) if m is not None: start = int(m.group('lower')) stop = int(m.group('upper')) + 1 else: start = 0 stop = -1 raw_query = self.request.query m = sorting_expression.match(raw_query) if m is not None: direction = m.group('direction') column = m.group('column') else: direction = '-' column = "date" if column not in ["id", "date", "winner_id", "winner_score", "winner_displayname", "opponent_id", "opponent_score", "opponent_displayname"]: column = "date" if direction == '-': direction = desc else: direction = asc session = SessionFactory() try: query = get_match_history_query(session, [user1.id, user2.id]) total = query.count() query = query.order_by(direction(column)) if not summary: query = query.slice(start, stop) result = query.all() if summary: score_dict = {'won': 0, 'lost': 0, 'points_scored': 0, 'difference': 0, 'form': ''} sum_dict = { user1.id: score_dict.copy(), user2.id: score_dict.copy() } for res in result: sum_dict[res.winner_id]['won'] += 1 sum_dict[res.winner_id]['points_scored'] += res.winner_score sum_dict[res.winner_id]['difference'] += res.winner_score-res.opponent_score sum_dict[res.winner_id]['form'] = 'W' + sum_dict[res.winner_id]['form'] sum_dict[res.opponent_id]['lost'] += 1 sum_dict[res.opponent_id]['points_scored'] += res.opponent_score sum_dict[res.opponent_id]['difference'] += res.opponent_score-res.winner_score sum_dict[res.opponent_id]['form'] = 'L' + sum_dict[res.opponent_id]['form'] result = [] for player in sum_dict: user = user1 if player==user1.id else user2 player_dict = sum_dict[player] player_dict['form'] = player_dict['form'][-5:] player_dict.update({'id': player, 'displayname': user.displayname}) result.append(player_dict) start = 0 stop = 1 total = 2 else: result = resultdict(result) data = "{}&& "+json.dumps(result) self.set_header('Content-range', 'items {}-{}/{}'.format(start, stop, total)) self.set_header('Content-length', len(data)) self.set_header('Content-type', 'application/json') self.write(data) finally: session.close()