def load_from_key_name(key_name, viewing_player_name, load_players=False): key = models.gamestatsmodel_key_from_name(key_name) obj = models.GameStatsModel.get(key) if obj: return GameStats(obj.json, viewing_player_name, load_players=load_players), obj return None, None
def get(self): # Save this action self.save_action() # Get player name, if any player_name = self.request.get('p') # Get the row count and validate count_str = self.request.get('count') if count_str == '': count = 25 else: count = int(count_str) if count < 0: count = 0 if count > SHOW_COUNT_MAX: count = SHOW_COUNT_MAX # Get row data q = models.PlayerModel.all() q.filter('blocked =', False) q.filter('hidden =', False) q.order('-rating') results = q.fetch(count) players = [player.Player(p, player_name) for p in results] # Get game data with one call game_keys = [] for p in players: if p.last_game_key_name: key_name = p.last_game_key_name key = models.gamestatsmodel_key_from_name(key_name) game_keys.append(key) game_objs = models.GameStatsModel.get(game_keys) game_map = {} for game_obj in game_objs: game_map[game_obj.key().name()] = game_obj rows = [] for index in xrange(len(players)): p = players[index] if p.rating == 0: break row = {} row['profile_url'] = p.get_player_stats_url() row['rank'] = index + 1 row['name'] = p.name row['avatar_url'] = p.get_avatar_url() row['game_count'] = p.game_count if game_map.has_key(p.last_game_key_name): title = game_map[p.last_game_key_name].mission_title row['last_mission_name'] = title else: row['last_mission_name'] = None row['player_rating'] = p.rating rows.append(row) # Figure out the next show url, if any (Show top N) show_count = count + SHOW_COUNT_INCREMENT if show_count > SHOW_COUNT_MAX: show_count = SHOW_COUNT_MAX show_url = '' if len(rows) == count and show_count > count: show_url = '%s?count=%d' % (config.LEADERBOARD_URL, show_count) if player_name != '': show_url = '%s&p=%s' % (show_url, player_name) # Render the template and serve the response template_values = { 'tabs': config.get_tabs(player_name), 'selected_tab': config.TAB_LEADERBOARD, 'rows': rows, 'chevron_image_url': config.CHEVRON_IMAGE_URL, 'show_count' : show_count, 'show_url' : show_url, } self.set_caching_headers(config.INFOPAGE_MAX_AGE_SECONDS) self.response.headers['Content-Type'] = 'application/xhtml+xml' path = os.path.join(os.path.dirname(__file__), 'leaderboard.xhtml') self.response.out.write(template.render(path, template_values))