]> de.git.xonotic.org Git - xonotic/xonstat.git/blobdiff - xonstat/views/map.py
refactored views in preparation for json output
[xonotic/xonstat.git] / xonstat / views / map.py
index fff321f9e3af10b6c25210822b58fa03e505ed40..86e70ad3aff62bd68e060d7286649a78a4a212b8 100755 (executable)
@@ -10,12 +10,9 @@ from xonstat.util import page_url
 \r
 log = logging.getLogger(__name__)\r
 \r
-def map_index(request):\r
-    """\r
-    Provides a list of all the current maps. \r
-    """\r
-    if 'page' in request.matchdict:\r
-        current_page = request.matchdict['page']\r
+def _map_index_data(request):\r
+    if request.params.has_key('page'):\r
+        current_page = request.params['page']\r
     else:\r
         current_page = 1\r
 \r
@@ -23,19 +20,33 @@ def map_index(request):
         map_q = DBSession.query(Map).\\r
                 order_by(Map.map_id.desc())\r
 \r
-        maps = Page(map_q, current_page, url=page_url)\r
+        maps = Page(map_q, current_page, items_per_page=10, url=page_url)\r
 \r
-        \r
     except Exception as e:\r
         maps = None\r
 \r
     return {'maps':maps, }\r
 \r
 \r
-def map_info(request):\r
+def map_index(request):\r
     """\r
-    List the information stored about a given map\r
+    Provides a list of all the current maps\r
     """\r
+    return _map_index_data(request)\r
+\r
+\r
+def map_index_json(request):\r
+    """\r
+    Provides a JSON-serialized list of all the current maps. \r
+    """\r
+    view_data =  _map_index_data(request)\r
+\r
+    maps = [m.to_dict() for m in view_data['maps']]\r
+\r
+    return maps\r
+\r
+\r
+def _map_info_data(request):\r
     map_id = request.matchdict['id']\r
 \r
     try: \r
@@ -59,10 +70,6 @@ def map_info(request):
             filter(PlayerGameStat.rank==1).\\r
             order_by(expr.desc(Game.start_dt)).all()[0:recent_games_count]\r
 \r
-        for i in range(recent_games_count-len(recent_games)):\r
-            recent_games.append(('-', '-', '-', '-'))\r
-\r
-\r
         # top players by score\r
         top_scorers = DBSession.query(Player.player_id, Player.nick,\r
                 func.sum(PlayerGameStat.score)).\\r
@@ -74,14 +81,11 @@ def map_info(request):
                         (datetime.utcnow() - timedelta(days=leaderboard_lifetime))).\\r
                 order_by(expr.desc(func.sum(PlayerGameStat.score))).\\r
                 group_by(Player.nick).\\r
-                group_by(Player.player_id).all()[0:10]\r
+                group_by(Player.player_id).all()[0:leaderboard_count]\r
 \r
         top_scorers = [(player_id, html_colors(nick), score) \\r
                 for (player_id, nick, score) in top_scorers]\r
 \r
-        for i in range(leaderboard_count-len(top_scorers)):\r
-            top_scorers.append(('-', '-', '-'))\r
-\r
         # top players by playing time\r
         top_players = DBSession.query(Player.player_id, Player.nick, \r
                 func.sum(PlayerGameStat.alivetime)).\\r
@@ -93,14 +97,11 @@ def map_info(request):
                         (datetime.utcnow() - timedelta(days=leaderboard_lifetime))).\\r
                 order_by(expr.desc(func.sum(PlayerGameStat.alivetime))).\\r
                 group_by(Player.nick).\\r
-                group_by(Player.player_id).all()[0:10]\r
+                group_by(Player.player_id).all()[0:leaderboard_count]\r
 \r
         top_players = [(player_id, html_colors(nick), score) \\r
                 for (player_id, nick, score) in top_players]\r
 \r
-        for i in range(leaderboard_count-len(top_players)):\r
-            top_players.append(('-', '-', '-'))\r
-\r
         # top servers using/playing this map\r
         top_servers = DBSession.query(Server.server_id, Server.name, \r
                 func.count(Game.game_id)).\\r
@@ -110,10 +111,7 @@ def map_info(request):
                         (datetime.utcnow() - timedelta(days=leaderboard_lifetime))).\\r
                 order_by(expr.desc(func.count(Game.game_id))).\\r
                 group_by(Server.name).\\r
-                group_by(Server.server_id).all()[0:10]\r
-\r
-        for i in range(leaderboard_count-len(top_servers)):\r
-            top_servers.append(('-', '-', '-'))\r
+                group_by(Server.server_id).all()[0:leaderboard_count]\r
 \r
     except Exception as e:\r
         gmap = None\r
@@ -123,3 +121,28 @@ def map_info(request):
             'top_players':top_players,\r
             'top_servers':top_servers,\r
             }\r
+\r
+\r
+def map_info(request):\r
+    """\r
+    List the information stored about a given map.\r
+    """\r
+    mapinfo_data =  _map_info_data(request)\r
+\r
+    # FIXME: code clone, should get these from _map_info_data\r
+    leaderboard_count = 10\r
+    recent_games_count = 20\r
+\r
+    for i in range(recent_games_count-len(mapinfo_data['recent_games'])):\r
+        mapinfo_data['recent_games'].append(('-', '-', '-', '-'))\r
+\r
+    for i in range(leaderboard_count-len(mapinfo_data['top_scorers'])):\r
+        mapinfo_data['top_scorers'].append(('-', '-', '-'))\r
+\r
+    for i in range(leaderboard_count-len(mapinfo_data['top_players'])):\r
+        mapinfo_data['top_players'].append(('-', '-', '-'))\r
+\r
+    for i in range(leaderboard_count-len(mapinfo_data['top_servers'])):\r
+        mapinfo_data['top_servers'].append(('-', '-', '-'))\r
+\r
+    return mapinfo_data\r