]> de.git.xonotic.org Git - xonotic/xonstat.git/commitdiff
Merge remote-tracking branch 'antzucaro/master'
authornyov <nyov@nexnode.net>
Tue, 15 May 2012 16:02:27 +0000 (18:02 +0200)
committernyov <nyov@nexnode.net>
Tue, 15 May 2012 16:02:27 +0000 (18:02 +0200)
18 files changed:
xonstat/__init__.py
xonstat/models.py
xonstat/templates/base.mako
xonstat/templates/game_index.mako
xonstat/templates/map_index.mako
xonstat/templates/nav.mako
xonstat/templates/navlinks.mako
xonstat/templates/player_index.mako
xonstat/templates/rank_index.mako
xonstat/templates/search.mako
xonstat/templates/server_index.mako
xonstat/views/__init__.py
xonstat/views/game.py
xonstat/views/map.py
xonstat/views/player.py
xonstat/views/search.py
xonstat/views/server.py
xonstat/views/submission.py

index b1f08d2c5ab93f395167037c548dcda6b7f1c4b7..d3a6d98a5ca8e1e07d1fe185658c06bbe583acd2 100755 (executable)
@@ -28,20 +28,11 @@ def main(global_config, **settings):
     config.add_view(stats_submit, route_name="stats_submit")
 
     # PLAYER ROUTES
-    config.add_route("player_game_index_paged",
-            "/player/{player_id:\d+}/games/page/{page:\d+}")
-    config.add_view(player_game_index, route_name="player_game_index_paged",
-        renderer="player_game_index.mako")
-
     config.add_route("player_game_index",
             "/player/{player_id:\d+}/games")
     config.add_view(player_game_index, route_name="player_game_index",
         renderer="player_game_index.mako")
 
-    config.add_route("player_index_paged", "/players/page/{page:\d+}")
-    config.add_view(player_index, route_name="player_index_paged",
-        renderer="player_index.mako")
-
     config.add_route("player_index", "/players")
     config.add_view(player_index, route_name="player_index",
         renderer="player_index.mako")
@@ -59,10 +50,6 @@ def main(global_config, **settings):
     config.add_view(game_index, route_name="game_index",
         renderer="game_index.mako")
 
-    config.add_route("game_index_paged", "/games/page/{page:\d+}")
-    config.add_view(game_index, route_name="game_index_paged",
-        renderer="game_index.mako")
-
     config.add_route("game_info", "/game/{id:\d+}")
     config.add_view(game_info, route_name="game_info",
         renderer="game_info.mako")
@@ -71,15 +58,7 @@ def main(global_config, **settings):
     config.add_view(rank_index, route_name="rank_index",
         renderer="rank_index.mako")
 
-    config.add_route("rank_index_paged", "/ranks/{game_type_cd:ctf|dm|tdm|duel}/page/{page:\d+}")
-    config.add_view(rank_index, route_name="rank_index_paged",
-        renderer="rank_index.mako")
-
     # SERVER ROUTES
-    config.add_route("server_index_paged", "/servers/page/{page:\d+}")
-    config.add_view(server_index, route_name="server_index_paged",
-        renderer="server_index.mako")
-
     config.add_route("server_index", "/servers")
     config.add_view(server_index, route_name="server_index",
         renderer="server_index.mako")
@@ -94,9 +73,9 @@ def main(global_config, **settings):
         renderer="server_info.mako")
 
     # MAP ROUTES
-    config.add_route("map_index_paged", "/maps/page/{page:\d+}")
-    config.add_view(map_index, route_name="map_index_paged",
-        renderer="map_index.mako")
+    config.add_route("map_index_json", "/maps.json")
+    config.add_view(map_index_json, route_name="map_index_json",
+        renderer="json")
 
     config.add_route("map_index", "/maps")
     config.add_view(map_index, route_name="map_index",
@@ -111,9 +90,4 @@ def main(global_config, **settings):
     config.add_view(search, route_name="search",
         renderer="search.mako")
 
-    config.add_route("search_paged", "search/page/{page:\d+}")
-    config.add_view(search, route_name="search_paged",
-        renderer="search.mako")
-
-
     return config.make_wsgi_app()
index d53e1daeb4fa4cf3bd187d4ec105b6021c02a335..d5cd88540db2b4b154626752620268daf6c16776 100755 (executable)
@@ -1,3 +1,4 @@
+import json
 import logging
 import math
 import sqlalchemy
@@ -66,6 +67,9 @@ class Map(object):
     def __repr__(self):
         return "<Map(%s, %s, %s)>" % (self.map_id, self.name, self.version)
 
+    def to_dict(self):
+        return {'map_id':self.map_id, 'name':self.name}
+
 
 class Game(object):
     def __init__(self, game_id=None, start_dt=None, game_type_cd=None, 
index fa33ee4c2cd2fdbc3e47202e08ddc00b70987898..d64700627198654f4cf4991809b3719e6012f02d 100755 (executable)
@@ -19,7 +19,6 @@
     </style>
 
     <%block name="css">
-    <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet">
     <!-- <link href="/static/css/style.min.css" rel="stylesheet"> -->
     <link href="/static/css/style.css" rel="stylesheet">
     </%block>
index f9d11de0cbd71e201a2ccad65e291b4f3b344d48..ecff992c6615638341218f846a3a22b50aa036df 100755 (executable)
@@ -28,6 +28,6 @@ Game Index
 </div>\r
 \r
 <!-- navigation links -->\r
-${navlinks("game_index_paged", games.page, games.last_page)}\r
+${navlinks("game_index", games.page, games.last_page)}\r
 % endif\r
 \r
index c6ae6b62c835d99071614b2604ab5be04270dc4f..fe34956f18c4a247b710435470d4b40c81668862 100755 (executable)
@@ -37,6 +37,6 @@ Map Index
     % endif\r
 \r
     <!-- navigation links -->\r
-    ${navlinks("map_index_paged", maps.page, maps.last_page)}\r
+    ${navlinks("map_index", maps.page, maps.last_page)}\r
   </div> <!-- /span4 -->\r
 </div> <!-- /row -->\r
index f4db7d0a71f2dd4c9f6d8493d03d1d6fbb4e0c5f..57eab80b025cdfd9f7da1abdae7f2490fab98661 100755 (executable)
@@ -49,7 +49,7 @@
                 <option>servers</option>
                 <option>maps</option>
               </select>
-            [<a href="${request.route_url('search')}"" title="Advanced search">+</a>]
+            [<a href="${request.route_url('search')}" title="Advanced search">+</a>]
             </form>
           </div><!--/.nav-collapse -->
         </div>
index acfb1669e83fa6f4f6d1322756954cc16d03176c..5c1fa4fae06a36f1a8f2d54667bc3f6b5ce2229d 100755 (executable)
@@ -1,7 +1,15 @@
 <%def name="navlinks(view, curr, last, **kwargs)">
+<%
+kwargs['_query'] = {'page': None}
+
+if 'search_query' in kwargs.keys():
+    kwargs['_query'] = dict(kwargs['_query'].items() + kwargs['search_query'].items())
+%>
+
 % if not (curr == last and curr == 1):
     % if curr != 1:
-            <a class="pagination" href="${request.route_url(view, page=curr-1, **kwargs)}" name="Previous Page">previous</a>
+            <% kwargs['_query']['page'] = curr-1 %>
+            <a class="pagination" href="${request.route_url(view, **kwargs)}" name="Previous Page">previous</a>
     % endif
 
     % if last < 8:
             ${link_page(view, i, curr, **kwargs)}
             % endfor
             <span class="pagination">...</span>
-            <a class="pagination" href="${request.route_url(view, page=last, **kwargs)}" name="Last Page">${last}</a>
+            <% kwargs['_query']['page'] = last %>
+            <a class="pagination" href="${request.route_url(view, **kwargs)}" name="Last Page">${last}</a>
 
         % elif last-curr < 6:
-            <a class="pagination" href="${request.route_url(view, page=1, **kwargs)}" name="First Page">1</a>
+            <% kwargs['_query']['page'] = 1 %>
+            <a class="pagination" href="${request.route_url(view, **kwargs)}" name="First Page">1</a>
             <span class="pagination">...</span>
             % for i in range(last-5, last+1):
             ${link_page(view, i, curr, **kwargs)}
             % endfor
         % else:
-            <a class="pagination" href="${request.route_url(view, page=1, **kwargs)}" name="First Page">1</a>
+            <% kwargs['_query']['page'] = 1 %>
+            <a class="pagination" href="${request.route_url(view, **kwargs)}" name="First Page">1</a>
 
             <span class="pagination">...</span>
             % for i in range(curr-2, curr+3):
             ${link_page(view, i, curr, **kwargs)}
             % endfor
             <span class="pagination">...</span>
-            <a class="pagination" href="${request.route_url(view, page=last, **kwargs)}" name="Last Page">${last}</a>
+            <% kwargs['_query']['page'] = last %>
+            <a class="pagination" href="${request.route_url(view, **kwargs)}" name="Last Page">${last}</a>
 
         % endif
     % endif
 
     % if curr != last:
-        <a class="pagination" href="${request.route_url(view, page=curr+1, **kwargs)}" name="Next Page">next</a>
+            <% kwargs['_query']['page'] = curr+1 %>
+        <a class="pagination" href="${request.route_url(view, **kwargs)}" name="Next Page">next</a>
     % endif
 % endif
 </%def>
@@ -45,6 +58,7 @@
 % if page_num == curr_page:
 <span class="pagination" style="color:#d95b00;">${page_num}</span>
 % else:
-    <a class="pagination" href="${request.route_url(view, page=page_num, **kwargs)}" name="Go to page ${page_num}">${page_num}</a>
+    <% kwargs['_query']['page'] = page_num %>
+    <a class="pagination" href="${request.route_url(view, **kwargs)}" name="Go to page ${page_num}">${page_num}</a>
 % endif
 </%def>
index 44e5fbbc875b997cf9d00336fd12c0b0ec785ee2..6bfdc7d1a7615df26804a3406d9da4e54525cb16 100755 (executable)
@@ -35,6 +35,6 @@ Player Index
     </table>\r
 % endif\r
 \r
-    ${navlinks("player_index_paged", players.page, players.last_page)}\r
+    ${navlinks("player_index", players.page, players.last_page)}\r
   </div> <!-- /span4 -->\r
 </div> <!-- /row -->\r
index 75f4574cf2980bba2dade6b8375e230064cde3fc..a3ce68f4ba207b90fe8b01d02a854c70e5c0632b 100755 (executable)
@@ -39,5 +39,5 @@ Rank Index</h2>
 </table>\r
 \r
 <!-- navigation links -->\r
-${navlinks("rank_index_paged", ranks.page, ranks.last_page, game_type_cd=game_type_cd)}\r
+${navlinks("rank_index", ranks.page, ranks.last_page, game_type_cd=game_type_cd)}\r
 % endif\r
index 3c4f79409b1d9347308cd3c306705e2dfffe3c5e..a7d54547f9947b5dba33df6d3fe7033f0018b8f8 100755 (executable)
 % endif
 
 <!-- navigation links -->
-${navlinks("search_paged", results.page, results.last_page, _query=query)}
+${navlinks("search", results.page, results.last_page, search_query=query)}
 % endif
 
 <%block name="js">
index 9ec0b3895d54471f6138611e476175a1796ce926..d6893cdd201f8b5f877e376c60534fe62f099e5b 100755 (executable)
@@ -35,6 +35,6 @@ Server Index
     </table>\r
     % endif\r
 \r
-    ${navlinks("server_index_paged", servers.page, servers.last_page)}\r
+    ${navlinks("server_index", servers.page, servers.last_page)}\r
   </div> <!-- /span4 -->\r
 </div> <!-- /row -->\r
index 06ab55a5fc304e15b46e0425462ac39b9187f5e7..5592f2cb4642027f90ea1d72530bd3c598db5b42 100755 (executable)
@@ -2,7 +2,7 @@ from xonstat.views.submission import stats_submit
 from xonstat.views.player import player_index, player_info, player_game_index\r
 from xonstat.views.player import player_accuracy\r
 from xonstat.views.game import game_index, game_info, rank_index\r
-from xonstat.views.map import map_info, map_index\r
+from xonstat.views.map import map_info, map_index, map_index_json\r
 from xonstat.views.server import server_info, server_game_index, server_index\r
 from xonstat.views.search import *\r
 from xonstat.views.main import main_index\r
index 1ce8a9ac74e5aeb164118a44db9da532f6427d66..336acbae99297951b7db1f78915bac19e75a9832 100755 (executable)
@@ -17,8 +17,8 @@ def game_index(request):
     These games are ordered by game_id, with the most current ones first.\r
     Paginated.\r
     """\r
-    if 'page' in request.matchdict:\r
-        current_page = request.matchdict['page']\r
+    if request.params.has_key('page'):\r
+        current_page = request.params['page']\r
     else:\r
         current_page = 1\r
 \r
@@ -27,7 +27,7 @@ def game_index(request):
             filter(Game.map_id == Map.map_id).\\r
             order_by(Game.game_id.desc())\r
 \r
-    games = Page(games_q, current_page, url=page_url)\r
+    games = Page(games_q, current_page, items_per_page=10, url=page_url)\r
 \r
     pgstats = {}\r
     for (game, server, map) in games:\r
@@ -99,8 +99,8 @@ def rank_index(request):
     """\r
     Provide a list of gametype ranks, paginated.\r
     """\r
-    if 'page' in request.matchdict:\r
-        current_page = request.matchdict['page']\r
+    if request.params.has_key('page'):\r
+        current_page = request.params['page']\r
     else:\r
         current_page = 1\r
 \r
index fff321f9e3af10b6c25210822b58fa03e505ed40..6b947eb61ce08c8a2abfc719b0c3dd742373ce22 100755 (executable)
@@ -10,12 +10,12 @@ from xonstat.util import page_url
 \r
 log = logging.getLogger(__name__)\r
 \r
-def map_index(request):\r
+def _map_index_data(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
+    if request.params.has_key('page'):\r
+        current_page = request.params['page']\r
     else:\r
         current_page = 1\r
 \r
@@ -23,15 +23,32 @@ 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_index(request):\r
+    """\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(request):\r
     """\r
     List the information stored about a given map. \r
index c20a61894982b7c790ece948815f5e681acc04ac..5d67fb9c937c70ba3050ceb7799b26c1d6f9982b 100755 (executable)
@@ -19,8 +19,8 @@ def player_index(request):
     """\r
     Provides a list of all the current players. \r
     """\r
-    if 'page' in request.matchdict:\r
-        current_page = int(request.matchdict['page'])\r
+    if request.params.has_key('page'):\r
+        current_page = request.params['page']\r
     else:\r
         current_page = 1\r
 \r
@@ -33,19 +33,12 @@ def player_index(request):
 \r
         players = Page(player_q, current_page, items_per_page=10, url=page_url)\r
 \r
-        last_linked_page = current_page + 4\r
-        if last_linked_page > players.last_page:\r
-            last_linked_page = players.last_page\r
-\r
-        pages_to_link = range(current_page+1, last_linked_page+1)\r
-\r
     except Exception as e:\r
         players = None\r
         raise e\r
 \r
-    return {'players':players,\r
-            'pages_to_link':pages_to_link,\r
-            }\r
+    return {'players':players\r
+           }\r
 \r
 \r
 def get_games_played(player_id):\r
index 3e16e77a8e21d21c50d28c7c5b433e267ae72e0b..8ce22004995080f869df9aa4b5219c193cefecad 100755 (executable)
@@ -85,8 +85,9 @@ def search(request):
     query = None
     _query = {}
 
-    if 'page' in request.matchdict:
-        current_page = request.matchdict['page']
+
+    if request.params.has_key('page'):
+        current_page = request.params['page']
     else:
         current_page = 1
 
@@ -134,7 +135,7 @@ def search(request):
 
         try:
             if q != None:
-                results = Page(q, current_page, url=page_url)
+                results = Page(q, current_page, items_per_page=10, url=page_url)
         except Exception as e:
             raise e
             result_type = None
index 8e4a7c6d976f8c536bca8a4f80dc7b0b4d966b79..daa9885948f15f15fd27f23f5c58885fe73c3456 100755 (executable)
@@ -15,8 +15,8 @@ def server_index(request):
     """\r
     Provides a list of all the current servers. \r
     """\r
-    if 'page' in request.matchdict:\r
-        current_page = request.matchdict['page']\r
+    if request.params.has_key('page'):\r
+        current_page = request.params['page']\r
     else:\r
         current_page = 1\r
 \r
@@ -24,7 +24,7 @@ def server_index(request):
         server_q = DBSession.query(Server).\\r
                 order_by(Server.server_id.desc())\r
 \r
-        servers = Page(server_q, current_page, url=page_url)\r
+        servers = Page(server_q, current_page, items_per_page=10, url=page_url)\r
 \r
         \r
     except Exception as e:\r
index 631d93b0f3bb3207c46599ea56af761ff5e86348..e841e0df90ebc813d12c37dc58ead71140857b12 100755 (executable)
@@ -563,15 +563,20 @@ def stats_submit(request):
             log.debug("ERROR: Blank game")\r
             raise pyramid.httpexceptions.HTTPOk("OK")\r
 \r
-        # FIXME: if we have two players and game type is 'dm',\r
-        # change this into a 'duel' gametype. This should be\r
-        # removed when the stats actually send 'duel' instead of 'dm'\r
+        # the "duel" gametype is fake\r
         if num_real_players(players, count_bots=True) == 2 and \\r
                 game_meta['G'] == 'dm':\r
             game_meta['G'] = 'duel'\r
 \r
+\r
+        # fix for DTG, who didn't #ifdef WATERMARK to set the revision info\r
+        try:\r
+            revision = game_meta['R']\r
+        except:\r
+            revision = "unknown"\r
+\r
         server = get_or_create_server(session=session, hashkey=idfp, \r
-                name=game_meta['S'], revision=game_meta['R'],\r
+                name=game_meta['S'], revision=revision,\r
                 ip_addr=get_remote_addr(request))\r
 \r
         gmap = get_or_create_map(session=session, name=game_meta['M'])\r