]> de.git.xonotic.org Git - xonotic/xonstat.git/commitdiff
Merge branch 'master' of github.com:antzucaro/XonStat
authorAnt Zucaro <azucaro@gmail.com>
Mon, 2 May 2011 23:43:48 +0000 (19:43 -0400)
committerAnt Zucaro <azucaro@gmail.com>
Mon, 2 May 2011 23:43:48 +0000 (19:43 -0400)
1  2 
xonstat/views.py

diff --combined xonstat/views.py
index ca568ec06e378784268306f657382606626ae211,a99e2eb4ef48312eedcc88d14e42b97a04f4fb32..fd0ce6fe973af018321be8cdd27d5c8a48098694
@@@ -4,8 -4,6 +4,8 @@@ from pyramid.response import Respons
  from pyramid.view import view_config
  
  from xonstat.models import *
 +from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
 +
  
  import logging
  log = logging.getLogger(__name__)
@@@ -39,49 -37,36 +39,49 @@@ def player_info(request)
  # statistics and its related information goes here
  ##########################################################################
  def get_or_create_server(session=None, name=None):
 -    server = None
      try:
          # find one by that name, if it exists
          server = session.query(Server).filter_by(name=name).one()
          log.debug("Found server id {0} with name {1}.".format(
              server.server_id, server.name))
 -    except:
 -        # otherwise create a new one
 +    except NoResultFound, e:
          server = Server(name=name)
          session.add(server)
          session.flush()
          log.debug("Created server id {0} with name {1}".format(
              server.server_id, server.name))
 +    except MultipleResultsFound, e:
 +        # multiple found, so use the first one but warn
 +        log.debug(e)
 +        servers = session.query(Server).filter_by(name=name).order_by(
 +                Server.server_id).all()
 +        server = servers[0]
 +        log.debug("Created server id {0} with name {1} but found \
 +                multiple".format(
 +            server.server_id, server.name))
  
      return server
  
  def get_or_create_map(session=None, name=None):
 -    gmap = None
      try:
          # find one by the name, if it exists
          gmap = session.query(Map).filter_by(name=name).one()
          log.debug("Found map id {0} with name {1}.".format(gmap.map_id, 
              gmap.name))
 -    except:
 -        # otherwise create a new one
 +    except NoResultFound, e:
          gmap = Map(name=name)
          session.add(gmap)
          session.flush()
          log.debug("Created map id {0} with name {1}.".format(gmap.map_id,
              gmap.name))
 +    except MultipleResultsFound, e:
 +        # multiple found, so use the first one but warn
 +        log.debug(e)
 +        gmaps = session.query(Map).filter_by(name=name).order_by(
 +                Map.map_id).all()
 +        gmap = gmaps[0]
 +        log.debug("Found map id {0} with name {1} but found \
 +                multiple.".format(gmap.map_id, gmap.name))
  
      return gmap
  
@@@ -159,16 -144,18 +159,18 @@@ def create_player_game_stat(session=Non
      for (key,value) in player_events.items():
          if key == 'n': pgstat.nick = value
          if key == 't': pgstat.team = value
+         if key == 'rank': pgstat.rank = value
+         if key == 'alivetime': 
+             pgstat.alivetime = datetime.timedelta(seconds=int(round(float(value))))
          if key == 'scoreboard-drops': pgstat.drops = value
          if key == 'scoreboard-returns': pgstat.returns = value
          if key == 'scoreboard-fckills': pgstat.carrier_frags = value
          if key == 'scoreboard-pickups': pgstat.pickups = value
 -        if key == 'scoreboard-caps': pgstat.caps = value
 +        if key == 'scoreboard-caps': pgstat.captures = value
          if key == 'scoreboard-score': pgstat.score = value
          if key == 'scoreboard-deaths': pgstat.deaths = value
          if key == 'scoreboard-kills': pgstat.kills = value
          if key == 'scoreboard-suicides': pgstat.suicides = value
-         # TODO: alivetime
  
      # check to see if we had a name, and if 
      # not use the name from the player id
@@@ -260,8 -247,7 +262,8 @@@ def parse_body(request)
              pass
      
      # add the last player we were working on
 -    players.append(player_events)
 +    if len(player_events) > 0:
 +        players.append(player_events)
  
      return (game_meta, players)
  
@@@ -303,7 -289,8 +305,8 @@@ def stats_submit(request)
              has_real_players = True
          player = get_or_create_player(session=session, 
                  hashkey=player_events['P'])
-         if 'joins' in player_events and 'matches' in player_events:
+         if 'joins' in player_events and 'matches' in player_events\
+                  and 'scoreboardvalid' in player_events:
              pgstat = create_player_game_stat(session=session, 
                      player=player, game=game, player_events=player_events)
              #pwstats = create_player_weapon_stats(session=session,