]> de.git.xonotic.org Git - xonotic/xonstat.git/blob - xonstat/models.py
Merge branch 'master' of github.com:antzucaro/XonStat
[xonotic/xonstat.git] / xonstat / models.py
1 import datetime
2 import logging
3 import sqlahelper
4 import sqlalchemy
5 import transaction
6
7 from sqlalchemy import Column
8 from sqlalchemy import Integer
9 from sqlalchemy import Unicode
10
11 from sqlalchemy.exc import IntegrityError
12 from sqlalchemy.ext.declarative import declarative_base
13
14 from sqlalchemy.orm import mapper
15 from sqlalchemy.orm import scoped_session
16 from sqlalchemy.orm import sessionmaker
17
18 Engine=sqlahelper.get_engine()
19 DBSession = scoped_session(sessionmaker())
20 Base = declarative_base()
21
22 # setup logging
23 log = logging.getLogger(__name__)
24
25 # reflect all the tables 
26 MetaData = sqlalchemy.MetaData(bind=Engine, reflect=True)
27
28 # assign all those tables to an object
29 achievements_table = MetaData.tables['achievements']
30 cd_achievement_table = MetaData.tables['cd_achievement']
31 cd_game_type_table = MetaData.tables['cd_game_type']
32 cd_mutator_table = MetaData.tables['cd_mutator']
33 cd_weapon_table = MetaData.tables['cd_weapon']
34 db_version_table = MetaData.tables['db_version']
35 game_mutators_table = MetaData.tables['game_mutators']
36 games_table = MetaData.tables['games']
37 hashkeys_table = MetaData.tables['hashkeys']
38 map_game_types_table = MetaData.tables['map_game_types']
39 maps_table = MetaData.tables['maps']
40 player_game_stats_table = MetaData.tables['player_game_stats']
41 players_table = MetaData.tables['players']
42 player_weapon_stats_table = MetaData.tables['player_weapon_stats']
43 servers_table = MetaData.tables['servers']
44
45 # define objects for all tables
46 class Player(object):
47     def __init__(self, player_id=None, nick=None, create_dt=datetime.datetime.now(), 
48             location = None):
49         self.player_id = player_id
50         self.nick = nick
51         self.create_dt = create_dt
52         self.location = location
53
54     def __repr__(self):
55         return "<Player(%s, %s, %s, %s)>" % (self.player_id, self.nick, 
56                 self.create_dt, self.location)
57
58 class Mutator(object):
59     def __init__(self, mutator_cd, name=None, descr=None, active_ind='Y'):
60         self.mutator_cd = mutator_cd
61         self.name = name
62         self.descr = descr
63         self.active_ind = active_ind
64
65     def __repr__(self):
66         return "<Mutator(%s, %s, %s, %s)>" % (self.mutator_cd, self.name, 
67                 self.descr, self.active_ind)
68
69 class GameType(object):
70     def __init__(self, game_type_cd, descr=None, active_ind='Y'):
71         self.game_type_cd = game_type_cd
72         self.descr = descr
73         self.active_ind = active_ind
74
75     def __repr__(self):
76         return "<GameType(%s, %s, %s)>" % (self.game_type_cd, self.descr, 
77                 self.active_ind)
78
79 class Weapon(object):
80     def __init__(self, weapon_cd=None, descr=None, active_ind='Y'):
81         self.weapon_cd = weapon_cd
82         self.descr = descr
83         self.active_ind = active_ind
84
85     def __repr__(self):
86         return "<Weapon(%s, %s, %s)>" % (self.weapon_cd, self.descr, 
87                 self.active_ind)
88
89 class Server(object):
90     def __init__(self, server_id=None, name=None, location=None, ip_addr=None,
91             max_players=None, create_dt=None, 
92             pure_ind='Y', active_ind='Y'):
93         self.server_id = server_id
94         self.name = name
95         self.location = location
96         self.ip_addr = ip_addr
97         self.max_players = max_players
98         self.create_dt = create_dt
99         self.pure_ind = pure_ind
100         self.active_ind = active_ind
101
102     def __repr__(self):
103         return "<Server(%s, %s, %s)>" % (self.server_id, self.name, 
104                 self.ip_addr)
105
106 class Map(object):
107     def __init__(self, map_id=None, name=None, version=None, pk3_name=None,
108             curl_url=None):
109         self.map_id = map_id
110         self.name = name
111         self.version = version
112         self.pk3_name = pk3_name
113         self.curl_url = curl_url
114
115     def __repr__(self):
116         return "<Map(%s, %s, %s)>" % (self.map_id, self.name, self.version)
117
118 class MapGameType(object):
119     def __init__(self, map_id=None, game_type_cd=None):
120         self.map_id = map_id
121         self.game_type_cd = game_type_cd
122
123     def __repr__(self):
124         return "<MapGameType(%s, %s)>" % (self.map_id, self.game_type_cd)
125
126 class Game(object):
127     def __init__(self, game_id=None, start_dt=None,
128             game_type_cd=None, server_id=None, map_id=None, duration=None,
129             winner=None, create_dt=None):
130         self.game_id = game_id
131         self.start_dt = start_dt
132         self.game_type_cd = game_type_cd
133         self.server_id = server_id
134         self.map_id = map_id
135         self.duration = duration
136         self.winner = winner
137         self.create_dt = create_dt
138
139     def __repr__(self):
140         return "<Game(%s, %s, %s, %s)>" % (self.game_id, self.start_dt, 
141                 self.game_type_cd, self.server_id)
142
143 class PlayerGameStat(object):
144     def __init__(self, player_id=None, game_id=None, create_dt=None, 
145             stat_type=None, team=None, kills=None, deaths=None, suicides=None, 
146             score=None, time=None, held=None, captures=None, pickups=None, 
147             carrier_frags=None, drops=None, returns=None, collects=None, 
148             destroys=None, destroys_holding_key=None, pushes=None, 
149             pushed=None, nick=None):
150         self.player_id = player_id
151         self.game_id = game_id
152         self.create_dt = create_dt
153         self.stat_type = stat_type
154         self.nick = nick
155         self.team = team
156         self.kills = kills
157         self.deaths = deaths
158         self.suicides = suicides
159         self.score = score
160         self.time = time
161         self.held = held
162         self.captures = captures
163         self.pickups = pickups
164         self.carrier_frags = carrier_frags
165         self.drops = drops
166         self.returns = returns
167         self.collects = collects
168         self.destroys = destroys
169         self.destroys_holding_key = destroys_holding_key
170         self.pushes = pushes
171         self.pushed = pushed
172
173     def __repr__(self):
174         return "<PlayerGameStat(%s, %s, %s, %s)>" \
175         % (self.player_id, self.game_id, self.create_dt, self.stat_type)
176
177 class GameMutator(object):
178     def __init__(self, game_id=None, mutator_cd=None):
179         self.game_id = game_id
180         self.mutator_cd = mutator_cd
181
182     def __repr__(self):
183         return "<GameMutator(%s, %s)>" % (self.game_id, self.mutator_cd)
184
185 class Achievement(object):
186     def __init__(self, achievement_cd=None, descr=None, limit=None, active_ind='Y'):
187         self.achievement_cd = achievement_cd
188         self.descr = descr
189         self.limit = limit
190         self.active_ind = active_ind
191
192     def __repr__(self):
193         return "<Achievement(%s, %s, %s)>" % (self.achievement_cd, self.descr, self.limit)
194
195 class PlayerAchievement(object):
196     def __init__(self, achievement_id=None, achievement_cd=None, 
197             player_id=None, create_dt=datetime.datetime.now()):
198         self.achievement_id = achievement_id
199         self.achievement_cd = achievement_cd
200         self.player_id = player_id
201         self.create_dt = create_dt
202
203     def __repr__(self):
204         return "<PlayerAchievement(%s, %s)>" % (self.player_id, self.achievement_cd)
205
206 class PlayerWeaponStat(object):
207     def __init__(self, player_weapon_stat_id=None, 
208             create_dt=datetime.datetime.now(), player_id=None,
209             game_id=None, weapon_cd=None, actual=None, max=None, frags=None):
210         self.player_weapon_stat_id = player_weapon_stat_id
211         self.create_dt = create_dt
212         self.player_id = player_id
213         self.game_id = game_id
214         self.weapon_cd = weapon_cd
215         self.actual = actual
216         self.max = max
217         self.frags = frags
218
219     def __repr__(self):
220         return "<PlayerWeaponStat(%s, %s, %s)>" % (self.player_weapon_stat_id,
221                 self.player_id, self.game_id)
222
223 class Hashkey(object):
224     def __init__(self, player_id=None, hashkey=None, active_ind='Y',
225             create_dt=datetime.datetime.now()):
226         self.player_id = player_id
227         self.hashkey = hashkey
228         self.active_ind = active_ind
229
230     def __repr__(self):
231         return "<Hashkey(%s, %s)>" % (self.player_id, self.hashkey)
232
233 # now map the tables and the objects together
234 mapper(PlayerAchievement, achievements_table)
235 mapper(Achievement, cd_achievement_table)
236 mapper(GameType, cd_game_type_table)
237 mapper(Mutator, cd_mutator_table)
238 mapper(Weapon, cd_weapon_table)
239 mapper(GameMutator, game_mutators_table)
240 mapper(Game, games_table)
241 mapper(Hashkey, hashkeys_table)
242 mapper(MapGameType, map_game_types_table)
243 mapper(Map, maps_table)
244 mapper(PlayerGameStat, player_game_stats_table)
245 mapper(Player, players_table)
246 mapper(PlayerWeaponStat, player_weapon_stats_table)
247 mapper(Server, servers_table)
248
249 def initialize_sql(engine):
250     DBSession.configure(bind=engine)
251     Base.metadata.bind = engine
252     Base.metadata.create_all(engine)
253