]> git.xonotic.org Git - xonotic/xonstat.git/blob - xonstat/batch/badges/playerdata.py
Merge branch 'sev/xolonium4-badges' into 'master'
[xonotic/xonstat.git] / xonstat / batch / badges / playerdata.py
1 from xonstat.models import DBSession, Player
2 from xonstat.views.player import get_games_played, get_overall_stats, get_ranks, get_elos
3
4
5 class PlayerData:
6
7     # player data, will be filled by get_data()
8     data = {}
9
10     def __init__(self):
11         self.data = {}
12
13     def __getattr__(self, key):
14         if self.data.has_key(key):
15             return self.data[key]
16         return None
17
18     @classmethod
19     def get_data(self, player_id):
20         """Return player data as dict.
21
22         This function is similar to the function in player.py but more optimized
23         for this purpose.
24         """
25         # total games
26         # wins/losses
27         # kills/deaths
28         
29         # duel/dm/tdm/ctf elo + rank
30         player = DBSession.query(Player).filter_by(player_id=player_id).\
31                 filter(Player.active_ind == True).one()
32         games_played    = get_games_played(player_id)
33         overall_stats   = get_overall_stats(player_id)
34         ranks           = get_ranks(player_id)
35         elos            = get_elos(player_id)
36
37         games_played_dict = {}
38         for game in games_played:
39             games_played_dict[game.game_type_cd] = game
40
41         ranks_dict = {}
42         for gt,rank in ranks.items():
43             ranks_dict[gt] = (rank.rank, rank.max_rank)
44
45         elos_dict = {}
46         for gt,elo in elos.items():
47             if elo.games > 0:
48                 elos_dict[gt] = elo.elo
49
50         self.data = {
51                 'player':player,
52                 'games_played':games_played_dict,
53                 'overall_stats':overall_stats,
54                 'ranks':ranks_dict,
55                 'elos':elos_dict,
56             }
57          
58