]> de.git.xonotic.org Git - xonotic/xonstat.git/blob - xonstat/models/player.py
Make models a package instead of being a single (huge) module.
[xonotic/xonstat.git] / xonstat / models / player.py
1 from calendar import timegm
2
3 from xonstat.util import html_colors, strip_colors, pretty_date, qfont_decode
4
5
6 class Player(object):
7     def nick_html_colors(self, limit=None):
8         if self.nick is None:
9             return "Anonymous Player"
10         else:
11             return html_colors(self.nick, limit)
12
13     def nick_strip_colors(self):
14         if self.nick is None:
15             return "Anonymous Player"
16         else:
17             return strip_colors(self.nick)
18
19     def joined_pretty_date(self):
20         return pretty_date(self.create_dt)
21
22     def __repr__(self):
23         return "<Player(%s, %s)>" % (self.player_id, self.nick.encode('utf-8'))
24
25     def to_dict(self):
26         return {'player_id':self.player_id, 'nick':self.nick,
27             'joined':self.create_dt.strftime('%Y-%m-%dT%H:%M:%SZ'),
28             'active_ind':self.active_ind, 'location':self.location,
29             'stripped_nick':qfont_decode(self.stripped_nick)}
30
31     def epoch(self):
32         return timegm(self.create_dt.timetuple())
33
34
35 class PlayerAchievement(object):
36     def __repr__(self):
37         return "<PlayerAchievement(%s, %s)>" % (self.player_id, self.achievement_cd)
38
39     def to_dict(self):
40         return {'player_id':self.player_id, 'achievement_cd':self.achievement_cd}
41
42
43 class Hashkey(object):
44     def __init__(self, player_id=None, hashkey=None):
45         self.player_id = player_id
46         self.hashkey = hashkey
47
48     def __repr__(self):
49         return "<Hashkey(%s, %s)>" % (self.player_id, self.hashkey)
50
51     def to_dict(self):
52         return {'player_id':self.player_id, 'hashkey':self.hashkey}
53
54
55 class PlayerNick(object):
56     def __repr__(self):
57         return "<PlayerNick(%s, %s)>" % (self.player_id, qfont_decode(self.stripped_nick))
58
59     def to_dict(self):
60         return {'player_id':self.player_id, 'name':qfont_decode(self.stripped_nick)}
61
62
63 class PlayerElo(object):
64     def __init__(self, player_id=None, game_type_cd=None, elo=None):
65
66         self.player_id = player_id
67         self.game_type_cd = game_type_cd
68         self.elo = elo
69         self.score = 0
70         self.games = 0
71
72     def __repr__(self):
73         return "<PlayerElo(pid=%s, gametype=%s, elo=%s, games=%s)>" % (self.player_id, self.game_type_cd, self.elo, self.games)
74
75     def to_dict(self):
76         return {'player_id':self.player_id, 'game_type_cd':self.game_type_cd, 'elo':self.elo, 'games':self.games}
77
78
79 class PlayerRank(object):
80
81     def nick_html_colors(self, limit=None):
82         if self.nick is None:
83             return "Anonymous Player"
84         else:
85             return html_colors(self.nick, limit)
86
87     def __repr__(self):
88         return "<PlayerRank(pid=%s, gametype=%s, rank=%s)>" % (self.player_id, self.game_type_cd, self.rank)
89
90     def to_dict(self):
91         return {'player_id':self.player_id, 'game_type_cd':self.game_type_cd, 'rank':self.rank}
92
93
94 class PlayerCaptime(object):
95     def __init__(self, player_id=None, game_id=None, map_id=None,
96             fastest_cap=None, mod=None):
97         self.player_id = player_id
98         self.game_id = game_id
99         self.map_id = map_id
100         self.fastest_cap = fastest_cap
101         self.mod = mod
102
103     def __repr__(self):
104         return "<PlayerCaptime(pid=%s, map_id=%s, mod=%s)>" % (self.player_id,
105                 self.map_id, self.mod)
106
107     def fuzzy_date(self):
108         return pretty_date(self.create_dt)
109
110     def epoch(self):
111         return timegm(self.create_dt.timetuple())
112
113
114 class PlayerGroups(object):
115     def __init__(self, player_id=None, group_name=None):
116         self.player_id  = player_id
117         self.group_name = group_name
118
119     def __repr__(self):
120         return "<PlayerGroups(%s, %s)>" % (self.player_id, self.group_name)
121
122
123 class PlayerCapTime(object):
124     """Fastest flag capture times per player, assembled from a SQLAlchemy query"""
125     def __init__(self, row):
126         self.fastest_cap = row.fastest_cap
127         self.create_dt = row.create_dt
128         self.create_dt_epoch = timegm(row.create_dt.timetuple())
129         self.create_dt_fuzzy = pretty_date(row.create_dt)
130         self.player_id = row.player_id
131         self.game_id = row.game_id
132         self.map_id = row.map_id
133         self.map_name = row.map_name
134         self.server_id = row.server_id
135         self.server_name = row.server_name
136
137     def to_dict(self):
138         return {
139             "fastest_cap" : self.fastest_cap.total_seconds(),
140             "create_dt_epoch": self.create_dt_epoch,
141             "create_dt_fuzzy": self.create_dt_fuzzy,
142             "game_id":self.game_id,
143             "map_id": self.map_id,
144             "map_name": self.map_name,
145             "server_id": self.server_id,
146             "server_name": self.server_name,
147             }
148
149
150 class PlayerMedal(object):
151     def __repr__(self):
152         return "<PlayerRank(pid=%s, place=%s, alt=%s)>" % (self.player_id,
153                 self.place, self.alt)
154
155
156 class Achievement(object):
157     def __repr__(self):
158         return "<Achievement(%s, %s, %s)>" % (self.achievement_cd, self.descr, self.limit)
159
160     def to_dict(self):
161         return {'achievement_cd':self.achievement_cd, 'name':self.descr, 'limit':self.limit}