]> de.git.xonotic.org Git - xonotic/xonstat.git/blobdiff - xonstat/models/player.py
Make models a package instead of being a single (huge) module.
[xonotic/xonstat.git] / xonstat / models / player.py
diff --git a/xonstat/models/player.py b/xonstat/models/player.py
new file mode 100644 (file)
index 0000000..bc4cb45
--- /dev/null
@@ -0,0 +1,161 @@
+from calendar import timegm
+
+from xonstat.util import html_colors, strip_colors, pretty_date, qfont_decode
+
+
+class Player(object):
+    def nick_html_colors(self, limit=None):
+        if self.nick is None:
+            return "Anonymous Player"
+        else:
+            return html_colors(self.nick, limit)
+
+    def nick_strip_colors(self):
+        if self.nick is None:
+            return "Anonymous Player"
+        else:
+            return strip_colors(self.nick)
+
+    def joined_pretty_date(self):
+        return pretty_date(self.create_dt)
+
+    def __repr__(self):
+        return "<Player(%s, %s)>" % (self.player_id, self.nick.encode('utf-8'))
+
+    def to_dict(self):
+        return {'player_id':self.player_id, 'nick':self.nick,
+            'joined':self.create_dt.strftime('%Y-%m-%dT%H:%M:%SZ'),
+            'active_ind':self.active_ind, 'location':self.location,
+            'stripped_nick':qfont_decode(self.stripped_nick)}
+
+    def epoch(self):
+        return timegm(self.create_dt.timetuple())
+
+
+class PlayerAchievement(object):
+    def __repr__(self):
+        return "<PlayerAchievement(%s, %s)>" % (self.player_id, self.achievement_cd)
+
+    def to_dict(self):
+        return {'player_id':self.player_id, 'achievement_cd':self.achievement_cd}
+
+
+class Hashkey(object):
+    def __init__(self, player_id=None, hashkey=None):
+        self.player_id = player_id
+        self.hashkey = hashkey
+
+    def __repr__(self):
+        return "<Hashkey(%s, %s)>" % (self.player_id, self.hashkey)
+
+    def to_dict(self):
+        return {'player_id':self.player_id, 'hashkey':self.hashkey}
+
+
+class PlayerNick(object):
+    def __repr__(self):
+        return "<PlayerNick(%s, %s)>" % (self.player_id, qfont_decode(self.stripped_nick))
+
+    def to_dict(self):
+        return {'player_id':self.player_id, 'name':qfont_decode(self.stripped_nick)}
+
+
+class PlayerElo(object):
+    def __init__(self, player_id=None, game_type_cd=None, elo=None):
+
+        self.player_id = player_id
+        self.game_type_cd = game_type_cd
+        self.elo = elo
+        self.score = 0
+        self.games = 0
+
+    def __repr__(self):
+        return "<PlayerElo(pid=%s, gametype=%s, elo=%s, games=%s)>" % (self.player_id, self.game_type_cd, self.elo, self.games)
+
+    def to_dict(self):
+        return {'player_id':self.player_id, 'game_type_cd':self.game_type_cd, 'elo':self.elo, 'games':self.games}
+
+
+class PlayerRank(object):
+
+    def nick_html_colors(self, limit=None):
+        if self.nick is None:
+            return "Anonymous Player"
+        else:
+            return html_colors(self.nick, limit)
+
+    def __repr__(self):
+        return "<PlayerRank(pid=%s, gametype=%s, rank=%s)>" % (self.player_id, self.game_type_cd, self.rank)
+
+    def to_dict(self):
+        return {'player_id':self.player_id, 'game_type_cd':self.game_type_cd, 'rank':self.rank}
+
+
+class PlayerCaptime(object):
+    def __init__(self, player_id=None, game_id=None, map_id=None,
+            fastest_cap=None, mod=None):
+        self.player_id = player_id
+        self.game_id = game_id
+        self.map_id = map_id
+        self.fastest_cap = fastest_cap
+        self.mod = mod
+
+    def __repr__(self):
+        return "<PlayerCaptime(pid=%s, map_id=%s, mod=%s)>" % (self.player_id,
+                self.map_id, self.mod)
+
+    def fuzzy_date(self):
+        return pretty_date(self.create_dt)
+
+    def epoch(self):
+        return timegm(self.create_dt.timetuple())
+
+
+class PlayerGroups(object):
+    def __init__(self, player_id=None, group_name=None):
+        self.player_id  = player_id
+        self.group_name = group_name
+
+    def __repr__(self):
+        return "<PlayerGroups(%s, %s)>" % (self.player_id, self.group_name)
+
+
+class PlayerCapTime(object):
+    """Fastest flag capture times per player, assembled from a SQLAlchemy query"""
+    def __init__(self, row):
+        self.fastest_cap = row.fastest_cap
+        self.create_dt = row.create_dt
+        self.create_dt_epoch = timegm(row.create_dt.timetuple())
+        self.create_dt_fuzzy = pretty_date(row.create_dt)
+        self.player_id = row.player_id
+        self.game_id = row.game_id
+        self.map_id = row.map_id
+        self.map_name = row.map_name
+        self.server_id = row.server_id
+        self.server_name = row.server_name
+
+    def to_dict(self):
+        return {
+            "fastest_cap" : self.fastest_cap.total_seconds(),
+            "create_dt_epoch": self.create_dt_epoch,
+            "create_dt_fuzzy": self.create_dt_fuzzy,
+            "game_id":self.game_id,
+            "map_id": self.map_id,
+            "map_name": self.map_name,
+            "server_id": self.server_id,
+            "server_name": self.server_name,
+            }
+
+
+class PlayerMedal(object):
+    def __repr__(self):
+        return "<PlayerRank(pid=%s, place=%s, alt=%s)>" % (self.player_id,
+                self.place, self.alt)
+
+
+class Achievement(object):
+    def __repr__(self):
+        return "<Achievement(%s, %s, %s)>" % (self.achievement_cd, self.descr, self.limit)
+
+    def to_dict(self):
+        return {'achievement_cd':self.achievement_cd, 'name':self.descr, 'limit':self.limit}
\ No newline at end of file