]> de.git.xonotic.org Git - xonotic/xonstat.git/blob - xonstat/views/player.py
Major reorganization. Views made into a module with all of the sub-portions categorized.
[xonotic/xonstat.git] / xonstat / views / player.py
1 import datetime\r
2 import logging\r
3 import re\r
4 import time\r
5 from pyramid.response import Response\r
6 from sqlalchemy import desc\r
7 from webhelpers.paginate import Page, PageURL\r
8 from xonstat.models import *\r
9 from xonstat.util import page_url\r
10 \r
11 log = logging.getLogger(__name__)\r
12 \r
13 \r
14 def player_index(request):\r
15     """\r
16     Provides a list of all the current players. \r
17     """\r
18     players = DBSession.query(Player)\r
19 \r
20     log.debug("testing logging; entered PlayerHandler.index()")\r
21     return {'players':players}\r
22 \r
23 def player_info(request):\r
24     """\r
25     Provides detailed information on a specific player\r
26     """\r
27     player_id = request.matchdict['id']\r
28     try:\r
29         player = DBSession.query(Player).filter_by(player_id=player_id).one()\r
30 \r
31         weapon_stats = DBSession.query("descr", "actual_total", \r
32                 "max_total", "hit_total", "fired_total", "frags_total").\\r
33                 from_statement(\r
34                     "select cw.descr, sum(actual) actual_total, "\r
35                     "sum(max) max_total, sum(hit) hit_total, "\r
36                     "sum(fired) fired_total, sum(frags) frags_total "\r
37                     "from xonstat.player_weapon_stats ws, xonstat.cd_weapon cw "\r
38                     "where ws.weapon_cd = cw.weapon_cd "\r
39                     "and player_id = :player_id "\r
40                     "group by descr "\r
41                     "order by descr"\r
42                 ).params(player_id=player_id).all()\r
43 \r
44         log.debug(weapon_stats)\r
45 \r
46         recent_games = DBSession.query(PlayerGameStat, Game, Server, Map).\\r
47                 filter(PlayerGameStat.player_id == player_id).\\r
48                 filter(PlayerGameStat.game_id == Game.game_id).\\r
49                 filter(Game.server_id == Server.server_id).\\r
50                 filter(Game.map_id == Map.map_id).\\r
51                 order_by(Game.game_id.desc())[0:10]\r
52 \r
53     except Exception as e:\r
54         player = None\r
55         weapon_stats = None\r
56         recent_games = None\r
57     return {'player':player, \r
58             'recent_games':recent_games,\r
59             'weapon_stats':weapon_stats}\r
60 \r
61 \r
62 def player_game_index(request):\r
63     """\r
64     Provides an index of the games in which a particular\r
65     player was involved. This is ordered by game_id, with\r
66     the most recent game_ids first. Paginated.\r
67     """\r
68     player_id = request.matchdict['player_id']\r
69 \r
70     if 'page' in request.matchdict:\r
71         current_page = request.matchdict['page']\r
72     else:\r
73         current_page = 1\r
74 \r
75     try:\r
76         player = DBSession.query(Player).filter_by(player_id=player_id).one()\r
77 \r
78         games_q = DBSession.query(PlayerGameStat, Game, Server, Map).\\r
79                 filter(PlayerGameStat.player_id == player_id).\\r
80                 filter(PlayerGameStat.game_id == Game.game_id).\\r
81                 filter(Game.server_id == Server.server_id).\\r
82                 filter(Game.map_id == Map.map_id).\\r
83                 order_by(Game.game_id.desc())\r
84 \r
85         games = Page(games_q, current_page, url=page_url)\r
86 \r
87         \r
88     except Exception as e:\r
89         player = None\r
90         games = None\r
91         raise e\r
92 \r
93     return {'player':player,\r
94             'games':games}\r
95 \r
96 \r
97 def player_weapon_stats(request):\r
98     """\r
99     List the accuracy statistics for the given player_id in a particular\r
100     game.\r
101     """\r
102     game_id = request.matchdict['game_id']\r
103     pgstat_id = request.matchdict['pgstat_id']\r
104     try:\r
105         pwstats = DBSession.query(PlayerWeaponStat, Weapon).\\r
106                 filter(PlayerWeaponStat.weapon_cd==Weapon.weapon_cd).\\r
107                 filter_by(game_id=game_id).\\r
108                 filter_by(player_game_stat_id=pgstat_id).\\r
109                 order_by(Weapon.descr).\\r
110                 all()\r
111 \r
112         pgstat = DBSession.query(PlayerGameStat).\\r
113                 filter_by(player_game_stat_id=pgstat_id).one()\r
114 \r
115         game = DBSession.query(Game).filter_by(game_id=game_id).one()\r
116 \r
117         log.debug(pwstats)\r
118         log.debug(pgstat)\r
119         log.debug(game)\r
120 \r
121     except Exception as e:\r
122         pwstats = None\r
123         pgstat = None\r
124         game = None\r
125         raise e\r
126     return {'pwstats':pwstats, 'pgstat':pgstat, 'game':game}\r