import pyramid.httpexceptions
import sqlalchemy as sa
import sqlalchemy.sql.functions as func
+import sqlalchemy.sql.expression as expr
from calendar import timegm
from collections import namedtuple
from webhelpers.paginate import Page
"from player_ranks "
"group by game_type_cd) overall "
"where pr.game_type_cd = overall.game_type_cd "
+ "and max_rank > 1 "
"and player_id = :player_id "
"order by rank").\
params(player_id=player_id).all()
cake_day = is_cake_day(player.create_dt)
except Exception as e:
- player = None
- games_played = None
- overall_stats = None
- fav_maps = None
- elos = None
- ranks = None
- recent_games = None
- recent_weapons = []
- cake_day = False
- ## do not raise exceptions here (only for debugging)
+ raise pyramid.httpexceptions.HTTPNotFound
+
+ ## do not raise application exceptions here (only for debugging)
# raise e
return {'player':player,
(idfp, status) = verify_request(request)
log.debug("d0_blind_id verification: idfp={0} status={1}\n".format(idfp, status))
- hashkey = request.matchdict['hashkey']
-<<<<<<< HEAD
log.debug("\n----- BEGIN REQUEST BODY -----\n" + request.body +
"----- END REQUEST BODY -----\n\n")
-=======
+
+ hashkey = request.matchdict['hashkey']
# the incoming hashkey is double quoted, and WSGI unquotes once...
hashkey = unquote(hashkey)
->>>>>>> master
try:
player = DBSession.query(Player).\
def player_captimes_data(request):
- player_id = int(request.matchdict['id'])
+ player_id = int(request.matchdict['player_id'])
if player_id <= 2:
player_id = -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'])
+ if request.params.has_key('page'):
+ current_page = request.params['page']
+ else:
+ current_page = 1
- dbquery = 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).all()
+ 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()
- player_captimes = []
- for row in dbquery:
- player_captimes.append(PlayerCaptimes(
+ #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)
+
+ try:
+ 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')).\
+ filter(PlayerCaptime.player_id==player_id).\
+ filter(PlayerCaptime.game_id==Game.game_id).\
+ filter(PlayerCaptime.map_id==Map.map_id).\
+ 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)
+
+ # 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()),
map_id=row.map_id,
map_name=row.map_name,
server_id=row.server_id,
- server_name=row.server_name,
- ))
+ server_name=row.server_name
+ ) for row in player_captimes.items]
+
+ except Exception as e:
+ player = None
+ player_captimes = None
return {
- 'captimes':player_captimes,
'player_id':player_id,
- 'player_url':request.route_url('player_info', id=player_id),
'player':player,
+ 'captimes':player_captimes,
+ #'player_url':request.route_url('player_info', id=player_id),
}
filter(PlayerWeaponStat.player_id == player_id).\
filter(PlayerWeaponStat.game_id.in_(games_raw)).all()
- # NVD3 expects data points for all weapons used across the
- # set of games *for each* point on the x axis. This means populating
- # zero-valued weapon stat entries for games where a weapon was not
- # used in that game, but was used in another game for the set
games_to_weapons = {}
weapons_used = {}
sum_avgs = {}
weapons_used[ws.weapon_cd] = weapons_used.get(ws.weapon_cd, 0) + 1
sum_avgs[ws.weapon_cd] = sum_avgs.get(ws.weapon_cd, 0) + float(ws.hit)/float(ws.fired)
+ # Creating zero-valued weapon stat entries for games where a weapon was not
+ # used in that game, but was used in another game for the set. This makes
+ # the charts look smoother
for game_id in games_to_weapons.keys():
for weapon_cd in set(weapons_used.keys()) - set(games_to_weapons[game_id]):
weapon_stats_raw.append(PlayerWeaponStat(player_id=player_id,