2 Models related to players.
5 from calendar import timegm
7 from xonstat.util import html_colors, strip_colors, pretty_date, qfont_decode
12 A player, which can represent either a human or a bot.
15 def nick_html_colors(self, limit=None):
17 return "Anonymous Player"
19 return html_colors(self.nick, limit)
21 def nick_strip_colors(self):
23 return "Anonymous Player"
25 return strip_colors(self.nick)
27 def joined_pretty_date(self):
28 return pretty_date(self.create_dt)
31 return "<Player({}, {})>".format(self.player_id, self.nick.encode('utf-8'))
35 'player_id': self.player_id,
37 'joined': self.create_dt.strftime('%Y-%m-%dT%H:%M:%SZ'),
38 'active_ind': self.active_ind,
39 'location': self.location,
40 'stripped_nick': qfont_decode(self.stripped_nick),
44 return timegm(self.create_dt.timetuple())
47 class Achievement(object):
49 A type of achievement. Referenced implicitly in PlayerAchievement.
53 return "<Achievement({}, {}, {})>".format(self.achievement_cd, self.descr, self.limit)
57 'achievement_cd': self.achievement_cd,
63 class PlayerAchievement(object):
65 Achievements a player has earned.
69 return "<PlayerAchievement({}, {})>".format(self.player_id, self.achievement_cd)
73 'player_id': self.player_id,
74 'achievement_cd': self.achievement_cd,
78 class Hashkey(object):
80 A player's identifying key from the d0_blind_id library.
83 def __init__(self, player_id=None, hashkey=None):
84 self.player_id = player_id
85 self.hashkey = hashkey
88 return "<Hashkey({}, {})>".format(self.player_id, self.hashkey)
92 'player_id': self.player_id,
93 'hashkey': self.hashkey
97 class PlayerNick(object):
99 A single nickname a player has used in a game.
103 return "<PlayerNick({}, {})>".format(self.player_id, qfont_decode(self.stripped_nick))
107 'player_id': self.player_id,
108 'name': qfont_decode(self.stripped_nick),
112 class PlayerElo(object):
114 A player's skill for a particular game type, as determined by a modified Elo algorithm.
117 def __init__(self, player_id=None, game_type_cd=None, elo=None):
118 self.player_id = player_id
119 self.game_type_cd = game_type_cd
125 return ("<PlayerElo(pid={}, gametype={}, elo={}, games={})>"
126 .format(self.player_id, self.game_type_cd, self.elo, self.games))
130 'player_id': self.player_id,
131 'game_type_cd': self.game_type_cd,
137 class PlayerRank(object):
139 A player's rank for a given game type.
142 def nick_html_colors(self, limit=None):
143 if self.nick is None:
144 return "Anonymous Player"
146 return html_colors(self.nick, limit)
149 return ("<PlayerRank(pid={}, gametype={}, rank={})>"
150 .format(self.player_id, self.game_type_cd, self.rank))
154 'player_id': self.player_id,
155 'game_type_cd': self.game_type_cd,
160 class PlayerCaptime(object):
162 A flag capture time for a player on a given map.
165 def __init__(self, player_id=None, game_id=None, map_id=None, fastest_cap=None, mod=None):
166 self.player_id = player_id
167 self.game_id = game_id
169 self.fastest_cap = fastest_cap
173 return ("<PlayerCaptime(pid={}, map_id={}, mod={})>"
174 .format(self.player_id, self.map_id, self.mod))
176 def fuzzy_date(self):
177 return pretty_date(self.create_dt)
180 return timegm(self.create_dt.timetuple())
183 class PlayerGroups(object):
185 An authorization group a player belongs to. Used to control access.
188 def __init__(self, player_id=None, group_name=None):
189 self.player_id = player_id
190 self.group_name = group_name
193 return "<PlayerGroups({}, {})>".format(self.player_id, self.group_name)
196 # TODO: determine if this is a real model (it is very similar to PlayerCaptime from above)
197 class PlayerCapTime(object):
199 Fastest flag capture times per player.
202 def __init__(self, row):
203 self.fastest_cap = row.fastest_cap
204 self.create_dt = row.create_dt
205 self.create_dt_epoch = timegm(row.create_dt.timetuple())
206 self.create_dt_fuzzy = pretty_date(row.create_dt)
207 self.player_id = row.player_id
208 self.game_id = row.game_id
209 self.map_id = row.map_id
210 self.map_name = row.map_name
211 self.server_id = row.server_id
212 self.server_name = row.server_name
216 "fastest_cap" : self.fastest_cap.total_seconds(),
217 "create_dt_epoch": self.create_dt_epoch,
218 "create_dt_fuzzy": self.create_dt_fuzzy,
219 "game_id":self.game_id,
220 "map_id": self.map_id,
221 "map_name": self.map_name,
222 "server_id": self.server_id,
223 "server_name": self.server_name,
227 class PlayerMedal(object):
229 A medal a player has earned in a large tournament.
233 return "<PlayerRank(pid={}, place={}, alt={})>".format(self.player_id, self.place, self.alt)