]> de.git.xonotic.org Git - xonotic/xonstat.git/blobdiff - xonstat/views/player.py
The player JSON view should use to_dict() instead.
[xonotic/xonstat.git] / xonstat / views / player.py
index 479ea1eb01f49576051febdbd7a177439aa8b68e..26da28f9deb3d29732a40ef063a728aeb6c4314d 100644 (file)
@@ -89,7 +89,8 @@ def get_games_played(player_id):
                         "FROM   games g, "
                                "player_game_stats pgs "
                         "WHERE  g.game_id = pgs.game_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()
 
                 "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 "
                        "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 "
                   "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 "
                                "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, "
                                "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)
 
     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,
 
     return [{
         'player':           player,
@@ -574,11 +575,13 @@ def player_info_json(request):
         'ranks':            ranks,
         'recent_games':     recent_games,
     }]
         'ranks':            ranks,
         'recent_games':     recent_games,
     }]
-    #return [{'status':'not implemented'}]
 
 
 def player_game_index_data(request):
 
 
 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
 
     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:
         games_played = get_games_played(player_id)
 
     except Exception as e:
+        raise e
         player = None
         games = None
         game_type_cd = None
         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 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:
 
     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')).\
         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))
 
                 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 {
 
     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):
 
 
 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):
 
 
 def player_weaponstats_data_json(request):