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
11 log = logging.getLogger(__name__)
\r
14 def player_index(request):
\r
16 Provides a list of all the current players.
\r
18 players = DBSession.query(Player)
\r
20 log.debug("testing logging; entered PlayerHandler.index()")
\r
21 return {'players':players}
\r
23 def player_info(request):
\r
25 Provides detailed information on a specific player
\r
27 player_id = request.matchdict['id']
\r
29 player = DBSession.query(Player).filter_by(player_id=player_id).one()
\r
31 weapon_stats = DBSession.query("descr", "actual_total",
\r
32 "max_total", "hit_total", "fired_total", "frags_total").\
\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
42 ).params(player_id=player_id).all()
\r
44 log.debug(weapon_stats)
\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
53 except Exception as e:
\r
57 return {'player':player,
\r
58 'recent_games':recent_games,
\r
59 'weapon_stats':weapon_stats}
\r
62 def player_game_index(request):
\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
68 player_id = request.matchdict['player_id']
\r
70 if 'page' in request.matchdict:
\r
71 current_page = request.matchdict['page']
\r
76 player = DBSession.query(Player).filter_by(player_id=player_id).one()
\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
85 games = Page(games_q, current_page, url=page_url)
\r
88 except Exception as e:
\r
93 return {'player':player,
\r
97 def player_weapon_stats(request):
\r
99 List the accuracy statistics for the given player_id in a particular
\r
102 game_id = request.matchdict['game_id']
\r
103 pgstat_id = request.matchdict['pgstat_id']
\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
112 pgstat = DBSession.query(PlayerGameStat).\
\r
113 filter_by(player_game_stat_id=pgstat_id).one()
\r
115 game = DBSession.query(Game).filter_by(game_id=game_id).one()
\r
121 except Exception as e:
\r
126 return {'pwstats':pwstats, 'pgstat':pgstat, 'game':game}
\r