X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonstat.git;a=blobdiff_plain;f=xonstat%2Fviews%2Fplayer.py;h=26da28f9deb3d29732a40ef063a728aeb6c4314d;hp=479ea1eb01f49576051febdbd7a177439aa8b68e;hb=9987525159cc4ed3ce1922b63d506e8f9df1eeb4;hpb=1d71d34e83394e6e69abb925564c3bdea2a39236 diff --git a/xonstat/views/player.py b/xonstat/views/player.py index 479ea1e..26da28f 100644 --- a/xonstat/views/player.py +++ b/xonstat/views/player.py @@ -89,7 +89,8 @@ def get_games_played(player_id): "FROM games g, " "player_game_stats pgs " "WHERE g.game_id = pgs.game_id " - "AND pgs.player_id = :player_id) win_loss " + "AND pgs.player_id = :player_id " + "AND g.players @> ARRAY[:player_id]) win_loss " "GROUP BY game_type_cd " ).params(player_id=player_id).all() @@ -167,6 +168,7 @@ def get_overall_stats(player_id): "player_game_stats pgs " "WHERE g.game_id = pgs.game_id " "AND g.game_type_cd = gt.game_type_cd " + "AND g.players @> ARRAY[:player_id] " "AND pgs.player_id = :player_id " "GROUP BY g.game_type_cd, game_type_descr " "UNION " @@ -289,6 +291,7 @@ def get_fav_maps(player_id, game_type_cd=None): "maps m " "WHERE g.game_id = pgs.game_id " "AND g.map_id = m.map_id " + "AND g.players @> ARRAY[:player_id]" "AND pgs.player_id = :player_id " "GROUP BY g.game_type_cd, " "m.map_id, " @@ -561,9 +564,7 @@ def player_info_json(request): for gt,mapinfo in player_info['fav_maps'].items(): fav_maps[gt] = to_json(mapinfo) - recent_games = [] - for game in player_info['recent_games']: - recent_games.append(to_json(game)) + recent_games = [g.to_dict() for g in player_info['recent_games']] return [{ 'player': player, @@ -574,11 +575,13 @@ def player_info_json(request): 'ranks': ranks, 'recent_games': recent_games, }] - #return [{'status':'not implemented'}] def player_game_index_data(request): - player_id = request.matchdict['player_id'] + try: + player_id = int(request.matchdict['player_id']) + except: + player_id = -1 game_type_cd = None game_type_descr = None @@ -618,6 +621,7 @@ def player_game_index_data(request): games_played = get_games_played(player_id) except Exception as e: + raise e player = None games = None game_type_cd = None @@ -971,41 +975,11 @@ def player_captimes_data(request): if player_id <= 2: player_id = -1; - if request.params.has_key('page'): - current_page = request.params['page'] - else: - current_page = 1 - - PlayerCaptimes = namedtuple('PlayerCaptimes', ['fastest_cap', - 'create_dt', 'create_dt_epoch', 'create_dt_fuzzy', - 'player_id', 'game_id', 'map_id', 'map_name', 'server_id', 'server_name']) - - player = DBSession.query(Player).filter_by(player_id=player_id).one() - - #pct_q = DBSession.query('fastest_cap', 'create_dt', 'player_id', 'game_id', 'map_id', - # 'map_name', 'server_id', 'server_name').\ - # from_statement( - # "SELECT ct.fastest_cap, " - # "ct.create_dt, " - # "ct.player_id, " - # "ct.game_id, " - # "ct.map_id, " - # "m.name map_name, " - # "g.server_id, " - # "s.name server_name " - # "FROM player_map_captimes ct, " - # "games g, " - # "maps m, " - # "servers s " - # "WHERE ct.player_id = :player_id " - # "AND g.game_id = ct.game_id " - # "AND g.server_id = s.server_id " - # "AND m.map_id = ct.map_id " - # #"ORDER BY ct.fastest_cap " - # "ORDER BY ct.create_dt desc" - # ).params(player_id=player_id) + current_page = request.params.get("page", 1) try: + player = DBSession.query(Player).filter_by(player_id=player_id).one() + pct_q = DBSession.query(PlayerCaptime.fastest_cap, PlayerCaptime.create_dt, PlayerCaptime.player_id, PlayerCaptime.game_id, PlayerCaptime.map_id, Map.name.label('map_name'), Game.server_id, Server.name.label('server_name')).\ @@ -1015,31 +989,18 @@ def player_captimes_data(request): filter(Game.server_id==Server.server_id).\ order_by(expr.desc(PlayerCaptime.create_dt)) - player_captimes = Page(pct_q, current_page, items_per_page=20, url=page_url) + except Exception as e: + raise pyramid.httpexceptions.HTTPNotFound - # replace the items in the canned pagination class with more rich ones - player_captimes.items = [PlayerCaptimes( - fastest_cap=row.fastest_cap, - create_dt=row.create_dt, - create_dt_epoch=timegm(row.create_dt.timetuple()), - create_dt_fuzzy=pretty_date(row.create_dt), - player_id=row.player_id, - game_id=row.game_id, - map_id=row.map_id, - map_name=row.map_name, - server_id=row.server_id, - server_name=row.server_name - ) for row in player_captimes.items] + captimes = Page(pct_q, current_page, items_per_page=20, url=page_url) - except Exception as e: - player = None - player_captimes = None + # replace the items in the canned pagination class with more rich ones + captimes.items = [PlayerCapTime(row) for row in captimes.items] return { - 'player_id':player_id, - 'player':player, - 'captimes':player_captimes, - #'player_url':request.route_url('player_info', id=player_id), + "player_id" : player_id, + "player" : player, + "captimes" : captimes, } @@ -1048,7 +1009,19 @@ def player_captimes(request): def player_captimes_json(request): - return player_captimes_data(request) + data = player_captimes_data(request) + page = request.params.get("page", 1) + + # perform any necessary JSON conversions + player_id = data["player_id"] + player = data["player"].to_dict() + captimes = [ct.to_dict() for ct in data["captimes"].items] + + return { + "player" : player, + "captimes" : captimes, + "page" : page, + } def player_weaponstats_data_json(request):