befa34600a0fb6cf8078d576e9240612694c3fd4
[xonotic/xonstat.git] / xonstat / models / map.py
1 """
2 Models related to maps.
3 """
4
5 from calendar import timegm
6
7 from xonstat.util import pretty_date, strip_colors, html_colors
8
9
10 class Map(object):
11     """
12     A playable map. Roughly equivalent to a pk3 file, but distinguished by name instead.
13     """
14
15     def __init__(self, name=None):
16         self.name = name
17
18     def __repr__(self):
19         return "<Map({0.map_id}, {0.name}, {0.version})>".format(self)
20
21     def to_dict(self):
22         return {
23             'map_id': self.map_id,
24             'name': self.name,
25             'version': self.version,
26         }
27
28     def fuzzy_date(self):
29         return pretty_date(self.create_dt)
30
31     def epoch(self):
32         return timegm(self.create_dt.timetuple())
33
34
35 # TODO: investigate if this model is truly a model, or really just a query (i.e. namedtuple)
36 class MapCapTime(object):
37     """
38     Fastest flag capture times per map.
39     """
40
41     def __init__(self, row):
42         self.fastest_cap = row.fastest_cap
43         self.create_dt = row.create_dt
44         self.create_dt_epoch = timegm(row.create_dt.timetuple())
45         self.create_dt_fuzzy = pretty_date(row.create_dt)
46         self.player_id = row.player_id
47         self.player_nick = row.player_nick
48         self.player_nick_stripped = strip_colors(row.player_nick)
49         self.player_nick_html = html_colors(row.player_nick)
50         self.game_id = row.game_id
51         self.server_id = row.server_id
52         self.server_name = row.server_name
53
54     def to_dict(self):
55         return {
56             "fastest_cap": self.fastest_cap.total_seconds(),
57             "create_dt_epoch": self.create_dt_epoch,
58             "create_dt_fuzzy": self.create_dt_fuzzy,
59             "player_id": self.player_id,
60             "player_nick": self.player_nick,
61             "player_nick_stripped": self.player_nick_stripped,
62             "game_id": self.game_id,
63             "server_id": self.server_id,
64             "server_name": self.server_name,
65         }