X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonstat.git;a=blobdiff_plain;f=xonstat%2Fviews%2Fhelpers.py;h=82ae6564d02041efb69d54485ef41d757e6dea44;hp=d8b3211e1c231b7c806d799c69bdfc34e8c9e548;hb=ccc6418a1dea2ac63e99cb9c3d57e87b943644fa;hpb=0d5147701fea4653c2bf1ca697fc27886d18ca83 diff --git a/xonstat/views/helpers.py b/xonstat/views/helpers.py index d8b3211..82ae656 100644 --- a/xonstat/views/helpers.py +++ b/xonstat/views/helpers.py @@ -1,9 +1,11 @@ import logging -import sqlalchemy.sql.expression as expr +from calendar import timegm from datetime import datetime + +import sqlalchemy.sql.expression as expr from sqlalchemy.orm import aliased -from xonstat.models import * -from xonstat.util import * +from xonstat.models import DBSession, Server, Map, Game, PlayerGameStat, GameType +from xonstat.util import pretty_date, html_colors log = logging.getLogger(__name__) @@ -29,47 +31,41 @@ class RecentGame(object): which will return rows matching this specification. ''' def __init__(self, row): - self.game_id = row.game_id - self.game_type_cd = row.game_type_cd - self.game_type_descr = row.game_type_descr - self.winner = row.winner - self.start_dt = row.start_dt - self.fuzzy_date = pretty_date(row.start_dt) - self.epoch = timegm(row.start_dt.timetuple()) - self.server_id = row.server_id - self.server_name = row.server_name - self.map_id = row.map_id - self.map_name = row.map_name - self.player_id = row.player_id - self.nick = row.nick + self.game_id = row.game_id + self.game_type_cd = row.game_type_cd + self.game_type_descr = row.game_type_descr + self.winner = row.winner + self.start_dt = row.start_dt + self.fuzzy_date = pretty_date(row.start_dt) + self.epoch = timegm(row.start_dt.timetuple()) + self.server_id = row.server_id + self.server_name = row.server_name + self.map_id = row.map_id + self.map_name = row.map_name + self.player_id = row.player_id + self.nick = row.nick self.nick_html_colors = html_colors(row.nick) - self.rank = row.rank - self.team = row.team + self.rank = row.rank + self.team = row.team try: self.elo_delta = row.elo_delta except: self.elo_delta = None - def _asdict(self): + def to_dict(self): return { - "game_id": self.game_id, - "game_type_cd": self.game_type_cd, - "game_type_descr": self.game_type_descr, - "winner": self.winner, - "start_dt": self.start_dt, - "fuzzy_dt": self.fuzzy_date, - "epoch": self.epoch, - "server_id": self.server_id, - "server_name": self.server_name, - "map_id": self.map_id, - "map_name": self.map_name, - "player_id": self.player_id, - "nick": self.nick, - "nick_html_colors": self.nick_html_colors, - "rank": self.rank, - "team": self.team, - "elo_delta": self.elo_delta, + "game_id" : self.game_id, + "game_type_cd" : self.game_type_cd, + "winning_team" : self.winner, + "fuzzy_dt" : self.fuzzy_date, + "epoch" : self.epoch, + "server_id" : self.server_id, + "server_name" : self.server_name, + "map_id" : self.map_id, + "map_name" : self.map_name, + "player_id" : self.player_id, + "winner" : self.nick, } def __repr__(self): @@ -77,7 +73,8 @@ class RecentGame(object): def recent_games_q(server_id=None, map_id=None, player_id=None, - game_type_cd=None, cutoff=None, force_player_id=False): + game_type_cd=None, cutoff=None, force_player_id=False, + start_game_id=None, end_game_id=None, player_id_2=None): ''' Returns a SQLA query of recent game data. Parameters filter the results returned if they are provided. If not, it is @@ -99,7 +96,7 @@ def recent_games_q(server_id=None, map_id=None, player_id=None, filter(Game.map_id==Map.map_id).\ filter(Game.game_id==PlayerGameStat.game_id).\ filter(Game.game_type_cd==GameType.game_type_cd).\ - order_by(expr.desc(Game.game_id)) + order_by(expr.desc(Game.create_dt)) # the various filters provided get tacked on to the query if server_id is not None: @@ -124,6 +121,12 @@ def recent_games_q(server_id=None, map_id=None, player_id=None, filter(Game.game_id==pgstat_alias.game_id).\ filter(Game.players.contains([player_id])).\ filter(pgstat_alias.player_id==player_id) + + # supports versus queries + if player_id_2 is not None: + recent_games_q = recent_games_q.\ + filter(Game.players.contains([player_id, player_id_2])) + else: recent_games_q = recent_games_q.\ filter(PlayerGameStat.scoreboardpos==1) @@ -137,4 +140,10 @@ def recent_games_q(server_id=None, map_id=None, player_id=None, recent_games_q = recent_games_q.\ filter(expr.between(Game.create_dt, cutoff, right_now)) + if start_game_id is not None: + recent_games_q = recent_games_q.filter(Game.game_id <= start_game_id) + + if end_game_id is not None: + recent_games_q = recent_games_q.filter(Game.game_id >= end_game_id) + return recent_games_q