2 Models related to players.
5 from calendar import timegm
7 from xonstat.models.mixins import FuzzyDateMixin, EpochMixin, NickColorsMixin
8 from xonstat.util import strip_colors, pretty_date, qfont_decode
11 class Player(EpochMixin, NickColorsMixin):
13 A player, which can represent either a human or a bot.
16 def nick_strip_colors(self):
18 return "Anonymous Player"
20 return strip_colors(self.nick)
22 # TODO: use FuzzyDateMixin instead, but change the method calls
23 def joined_pretty_date(self):
24 return pretty_date(self.create_dt)
27 return "<Player({}, {})>".format(self.player_id, self.nick.encode('utf-8'))
31 'player_id': self.player_id,
33 'joined': self.create_dt.strftime('%Y-%m-%dT%H:%M:%SZ'),
34 'active_ind': self.active_ind,
35 'location': self.location,
36 'stripped_nick': qfont_decode(self.stripped_nick),
40 class Achievement(object):
42 A type of achievement. Referenced implicitly in PlayerAchievement.
46 return "<Achievement({0.achievement_cd}, {0.descr}, {0.limit})>".format(self)
50 'achievement_cd': self.achievement_cd,
56 class PlayerAchievement(object):
58 Achievements a player has earned.
62 return "<PlayerAchievement({0.player_id}, {0.achievement_cd})>".format(self)
66 'player_id': self.player_id,
67 'achievement_cd': self.achievement_cd,
71 class Hashkey(object):
73 A player's identifying key from the d0_blind_id library.
76 def __init__(self, player_id=None, hashkey=None):
77 self.player_id = player_id
78 self.hashkey = hashkey
81 return "<Hashkey({0.player_id}, {0.hashkey})>".format(self)
85 'player_id': self.player_id,
86 'hashkey': self.hashkey
90 class PlayerNick(object):
92 A single nickname a player has used in a game.
96 return "<PlayerNick({0.player_id}, {0.stripped_nick})>".format(self)
100 'player_id': self.player_id,
101 'name': qfont_decode(self.stripped_nick),
105 class PlayerElo(object):
107 A player's skill for a particular game type, as determined by a modified Elo algorithm.
110 def __init__(self, player_id=None, game_type_cd=None, elo=None):
111 self.player_id = player_id
112 self.game_type_cd = game_type_cd
118 return ("<PlayerElo(pid={0.player_id}, gametype={0.game_type_cd}, elo={0.elo}, "
119 "games={0.games})>".format(self))
123 'player_id': self.player_id,
124 'game_type_cd': self.game_type_cd,
130 class PlayerRank(NickColorsMixin):
132 A player's rank for a given game type.
136 return ("<PlayerRank(pid={0.player_id}, gametype={0.game_type_cd}, rank={0.rank})>"
141 'player_id': self.player_id,
142 'game_type_cd': self.game_type_cd,
147 class PlayerCaptime(FuzzyDateMixin, EpochMixin):
149 A flag capture time for a player on a given map.
152 def __init__(self, player_id=None, game_id=None, map_id=None, fastest_cap=None, mod=None):
153 self.player_id = player_id
154 self.game_id = game_id
156 self.fastest_cap = fastest_cap
160 return "<PlayerCaptime(pid={0.player_id}, map_id={0.map_id}, mod={0.mod})>".format(self)
163 class PlayerGroups(object):
165 An authorization group a player belongs to. Used to control access.
168 def __init__(self, player_id=None, group_name=None):
169 self.player_id = player_id
170 self.group_name = group_name
173 return "<PlayerGroups({0.player_id}, {0.group_name})>".format(self)
176 # TODO: determine if this is a real model (it is very similar to PlayerCaptime from above)
177 class PlayerCapTime(object):
179 Fastest flag capture times per player.
182 def __init__(self, row):
183 self.fastest_cap = row.fastest_cap
184 self.create_dt = row.create_dt
185 self.create_dt_epoch = timegm(row.create_dt.timetuple())
186 self.create_dt_fuzzy = pretty_date(row.create_dt)
187 self.player_id = row.player_id
188 self.game_id = row.game_id
189 self.map_id = row.map_id
190 self.map_name = row.map_name
191 self.server_id = row.server_id
192 self.server_name = row.server_name
196 "fastest_cap" : self.fastest_cap.total_seconds(),
197 "create_dt_epoch": self.create_dt_epoch,
198 "create_dt_fuzzy": self.create_dt_fuzzy,
199 "game_id":self.game_id,
200 "map_id": self.map_id,
201 "map_name": self.map_name,
202 "server_id": self.server_id,
203 "server_name": self.server_name,
207 class PlayerMedal(object):
209 A medal a player has earned in a large tournament.
213 return "<PlayerMedal(pid={0.player_id}, place={0.place}, alt={0.alt})>".format(self)