def game_results(game): votes = Vote.query(Vote.game == game.key).fetch(1000) player_votes = {} for vote in votes: three = vote.three if player_votes.has_key(three): player_votes[three].threes += 1 else: player_votes[three] = PlayerGameVotes(game=game.key, player=three, threes=1) two = vote.two if player_votes.has_key(two): player_votes[two].twos += 1 else: player_votes[two] = PlayerGameVotes(game=game.key, player=two, twos=1) one = vote.one if player_votes.has_key(one): player_votes[one].ones += 1 else: player_votes[one] = PlayerGameVotes(game=game.key, player=one, ones=1) if len(player_votes) < 3: # No votes cast return None sorted_votes = sorted(player_votes.items(), key=lambda p: -p[1].ranking_points()) players = [sorted_votes[0][0], sorted_votes[1][0], sorted_votes[2][0]] result = GameResults(game=game.key, three=players[0], two=players[1], one=players[2], voters=len(votes)) return result
def delete_game(self, game): tokens = Token.query(Token.game == game.key) keys = [token.key for token in tokens] votes = Vote.query(Vote.game == game.key) keys.extend([vote.key for vote in votes]) votes = SelfVote.query(SelfVote.game == game.key) keys.extend([vote.key for vote in votes]) ndb.delete_multi_async(keys) game.key.delete()