def DoPost(self): game = Game.get_by_id(long(self.request.get('game_id'))) if not (game.player_1.key() == self.player.key() or game.player_2.key() == self.player.key()): raise Exception( "You can't complete a game you don't own, duderino!") if game.completed_date != None: raise Exception( "You can't complete a game that's already been completed, duderino!" ) player_1_won = bool(self.request.get('player_1_won')) player_2_won = bool(self.request.get('player_2_won')) if not player_1_won ^ player_2_won: raise "One player, and only one player, can win a game." game.completed_date = datetime.now() if player_1_won: game.winner = game.player_1 else: game.winner = game.player_2 update_ranks(game) game.player_1.put() game.player_2.put() game.put() logging.info("Player %s completed game %s" % (self.player, game)) self.redirect_to_redirect_path_or_home()
def DoPost(self): game = Game.get_by_id(long(self.request.get('game_id'))) if not (game.player_1.key() == self.player.key() or game.player_2.key() == self.player.key()): raise Exception("You can't complete a game you don't own, duderino!") if game.completed_date != None: raise Exception("You can't complete a game that's already been completed, duderino!") player_1_won = bool(self.request.get('player_1_won')) player_2_won = bool(self.request.get('player_2_won')) if not player_1_won ^ player_2_won: raise "One player, and only one player, can win a game." game.completed_date = datetime.now() if player_1_won: game.winner = game.player_1 else: game.winner = game.player_2 update_ranks(game) game.player_1.put() game.player_2.put() game.put() logging.info("Player %s completed game %s" % (self.player, game)) self.redirect_to_redirect_path_or_home()
def test_rank_using_wikipedia_example(self): player = mock_player(1613) elo.update_ranks(game(player, mock_player(1609), False)) elo.update_ranks(game(player, mock_player(1388), True)) elo.update_ranks(game(player, mock_player(1586), True)) elo.update_ranks(game(player, mock_player(1720), False)) # 1613 + 32 * (2 - 2.181), almost self.assertAlmostEquals(1608, player.rank, 0)
def DoGet(self): logging.info('Calculating ELO rankings') # Reset ranks for player in Player.all(): player.rank = elo.INITIAL_RANK player.put() # Calculate ranks for games in ascending order, since the order matters for ELO for game in Game.all_completed_asc(): logging.info('Updating rankings based on game completed at %s: %s' % (game.completed_date, game)) elo.update_ranks(game) game.player_1.put() game.player_2.put() self.render_to_response("calculate_elo_rankings.html")
def test_example_2(self): # example 2 from http://www.chesselo.com/, except using K=32 player = mock_player(2000) elo.update_ranks(game(player, mock_player(1900), False)) # 2000 + 32 * (0 - 0.64) self.assertAlmostEquals(1980, player.rank, 0)