+import json
import logging
import math
import sqlalchemy
-import sqlalchemy.sql.functions as func
+import sqlalchemy.sql.functions as sfunc
from datetime import timedelta
from sqlalchemy.orm import mapper
from sqlalchemy.orm import scoped_session
def __repr__(self):
return "<Map(%s, %s, %s)>" % (self.map_id, self.name, self.version)
+ def to_dict(self):
+ return {'map_id':self.map_id, 'name':self.name}
+
class Game(object):
def __init__(self, game_id=None, start_dt=None, game_type_cd=None,
if game_type_cd is None:
game_type_cd = self.game_type_cd
- duration = session.query(func.max(PlayerGameStat.alivetime)).\
- filter(PlayerGameStat.game_id==self.game_id).\
- one()
+ # we do not have the actual duration of the game, so use the
+ # maximum alivetime of the players instead
+ duration = 0
+ for d in session.query(sfunc.max(PlayerGameStat.alivetime)).\
+ filter(PlayerGameStat.game_id==self.game_id).\
+ one():
+ duration = d.seconds
scores = {}
alivetimes = {}
for pid in player_ids:
elos[pid].k = KREDUCTION.eval(elos[pid].games, alivetimes[pid],
- duration.seconds)
+ duration)
+ if elos[pid].k == 0:
+ del(elos[pid])
+ del(scores[pid])
+ del(alivetimes[pid])
elos = self.update_elos(elos, scores, ELOPARMS)
(self.player_id, self.game_type_cd, self.elo)
+class PlayerRank(object):
+
+ def nick_html_colors(self):
+ if self.nick is None:
+ return "Anonymous Player"
+ else:
+ return html_colors(self.nick)
+
+
+ def __repr__(self):
+ return "<PlayerRank(pid=%s, gametype=%s, rank=%s)>" % \
+ (self.player_id, self.game_type_cd, self.rank)
+
+
def initialize_db(engine=None):
DBSession.configure(bind=engine)
Base.metadata.bind = engine
servers_table = MetaData.tables['servers']
player_nicks_table = MetaData.tables['player_nicks']
player_elos_table = MetaData.tables['player_elos']
+ player_ranks_table = MetaData.tables['player_ranks']
# now map the tables and the objects together
mapper(PlayerAchievement, achievements_table)
mapper(Server, servers_table)
mapper(PlayerNick, player_nicks_table)
mapper(PlayerElo, player_elos_table)
+ mapper(PlayerRank, player_ranks_table)