def get_ladder(): import datetime a=PlayerModel.query() a=a.order(-PlayerModel.skillScore) b=PlayerModel.query() lastweek = datetime.datetime.now() - datetime.timedelta(days=7) b=b.filter(PlayerModel.lastGame > lastweek) return (a, b)
def start_game_db(Session): session = Session() players = list() players.append( PlayerModel(nickname='nwhite', email='*****@*****.**', role=4)) players.append( PlayerModel(nickname='nwhite2', email='*****@*****.**', role=4)) players.append( PlayerModel(nickname='nwhite3', email='*****@*****.**', role=4)) players.append( PlayerModel(nickname='nwhite4', email='*****@*****.**', role=4)) numberOfTeams = 2 minRequiredPlayers = 2 maxPlayersPerTeam = 2 game = GameModel(name='game1', initiator=players[0], numberOfTeams=numberOfTeams, minRequiredPlayers=minRequiredPlayers, maxPlayersPerTeam=maxPlayersPerTeam) for index in range(50): print("Putting card.") forbidden = "{'word1', 'word2', 'word3', 'word4'}" card = CardModel("word_" + str(index + 1), forbidden, "Book", "345") session.add(card) session.add(game) session.commit() for i in range(numberOfTeams): teamName = 'team' + str(i) team = TeamModel(teamName) if (i == 0): team.addPlayer(players[0]) team.addPlayer(players[1]) else: team.addPlayer(players[2]) team.addPlayer(players[3]) game.addTeam(team) game.gameState = GAME_READY session.commit() session.close()
def update_player_name(key, fname, lname): user = PlayerModel.get_by_id(key) user.first_name = fname user.last_name = lname user.put()
def get_most_games(type="total", top=5): """ Gets the top X number of people with the chosen type of game @param type: Which type of games to calculate. The default is "total", which will just get all games. Accepted inputs: "wins" and "losses" @param top: Number of people to collect """ players = PlayerModel.query() player_games = [] for player in players: email = player.key.id() games = 0 new_player = { "email":email, "data":0, "full_name":get_player_full_name(email) } if type == "wins": games = player.gamesWon elif type == "losses": games = player.gamesPlayed - player.gamesWon elif type == "total": games = player.gamesPlayed new_player['data'] = games player_games.append(new_player) sorted_players = sorted(player_games, key=itemgetter('data')) if len(sorted_players) < top: top = len(sorted_players) return sorted_players[len(sorted_players)-top:]
def get_player_full_name(email): """ Returns full name like "first last" @param email: Email/key of the person who's name you want """ user = PlayerModel.get_by_id(email) return user.first_name + " " + user.last_name
def test3JoinTeam(self): player1 = PlayerModel.findPlayerById(self.session, 2) team1 = TeamModel.getTeamById(self.session, 1) cGame = GameModel.getGameById(1, self.session) player1.team = team1 for i in range(1, 8): team = TeamModel.getTeamById(self.session, i) player2 = PlayerModel.findPlayerById(self.session, 2 * i) player3 = PlayerModel.findPlayerById(self.session, 2 * i + 1) player2.team = team player3.team = team i = i + 1 self.session.flush() self.session.commit() self.assertTrue(player1 in team1.players) self.assertTrue(player1.team == team1)
def start_game2_db(Session): session = Session() players = list() players.append( PlayerModel(nickname='nwhite', email='*****@*****.**', role=4)) players.append( PlayerModel(nickname='nwhite2', email='*****@*****.**', role=4)) players.append( PlayerModel(nickname='nwhite3', email='*****@*****.**', role=4)) players.append( PlayerModel(nickname='nwhite4', email='*****@*****.**', role=4)) numberOfTeams = 2 minRequiredPlayers = 2 maxPlayersPerTeam = 2 game = GameModel(name='game1', initiator=players[0], numberOfTeams=numberOfTeams, minRequiredPlayers=minRequiredPlayers, maxPlayersPerTeam=maxPlayersPerTeam) session.add(game) session.commit() for i in range(numberOfTeams): teamName = 'team' + str(i) team = TeamModel(teamName) if (i == 0): team.addPlayer(players[0]) team.addPlayer(players[1]) else: team.addPlayer(players[2]) team.addPlayer(players[3]) game.addTeam(team) game.gameState = GAME_READY session.commit() session.close()
def test1CreatePlayers(self): delete_db(engine) AppModelBase.metadata.create_all(engine) for i in range(50): email = "member" + str(i + 1) + "@bsu.edu" if PlayerModel.emailExists(self.session, email): print("the entered email already exists") else: member1 = PlayerModel("Member " + str(i + 1), email, 3) self.session.add(member1) self.session.flush() self.session.commit() self.assertEqual(PlayerModel.numberOfRows(self.session), 50) print( "\n\n*************Test add exist Player**********************\n\n") member2_email = "*****@*****.**" if (PlayerModel.emailExists(self.session, member2_email)): print("the entered email already exists") else: member2 = PlayerModel("Member2", "*****@*****.**", 3) self.session.add(member2) self.session.flush() self.session.commit() self.assertEqual(PlayerModel.numberOfRows(self.session), 50) print( "\n\n*************Test add invalid email Player***************\n\n" ) member3_email = "" member3_name = "member3" data = {"email": member3_email, "username": member3_name} feedback = PlayerModel.isValidPlayer(data) self.assertFalse(feedback["valid"]) self.assertEqual(feedback["message"], 'invalid email') print( "\n\n*************Test add invalid username Player***************\n\n" ) member4_email = "*****@*****.**" member4_name = "" data = {"email": member4_email, "username": member4_name} feedback = PlayerModel.isValidPlayer(data) print(feedback) self.assertFalse(feedback["valid"]) self.assertEqual( feedback["message"], 'username must be between 2 and 255 characters inclusive')
def get_highest_goals(against=False, top=5): """ Pass in a boolean to tell the method to calculate goals against instead of the default which is goals for. @return: a list of dictionaries containing the top however many people with the highest goals @param against: Pass True if you want this to count goals against @param top: Pass in the number of "top" people you want (e.g. Top 5) """ players = PlayerModel.query() player_goals = [] for player in players: email = player.key.id() matches = MatchModel.query(ndb.OR(MatchModel.player1 == email, MatchModel.player2 == email)) goals = 0 new_player = { 'email': email, 'data': 0, 'full_name': get_player_full_name(email) } for match in matches: if against: if match.player1 == email: goals += match.scores[0].player2 goals += match.scores[1].player2 goals += match.scores[2].player2 elif match.player2 == email: goals += match.scores[0].player1 goals += match.scores[1].player1 goals += match.scores[2].player1 elif not against: if match.player1 == email: goals += match.scores[0].player1 goals += match.scores[1].player1 goals += match.scores[2].player1 elif match.player2 == email: goals += match.scores[0].player2 goals += match.scores[1].player2 goals += match.scores[2].player2 new_player["data"] += goals player_goals.append(new_player) sorted_players = sorted(player_goals, key=itemgetter('data')) if len(sorted_players) < top: top = len(sorted_players) return sorted_players[len(sorted_players)-top:]
def test2GameCreate(self): print( "\n\n*************Test add new valid game with 7 teams**************\n\n" ) initiator = PlayerModel.findPlayerById(self.session, 1) #print ("Email: " + initiator.email) game = GameModel(initiator, "CS699", 60) team1 = TeamModel("Team 1") team2 = TeamModel("Team 2") team3 = TeamModel("Team 3") teams = [team1, team2, team3] initiator.team = team1 self.session.flush() game.teams = teams self.session.add(game) self.session.commit() self.assertEqual(GameModel.numberOfRows(self.session), 1) self.assertEqual(GameModel.getGameById(1, self.session), game) cGame = GameModel.getGameById(1, self.session) self.assertEqual(cGame.teams, teams) self.assertEqual(team1.gameId, 1) print( "\n\n*************Test add invalid gamename **************************\n\n" ) gameData = { "maxPlayersPerTeam": 2, "turnDuration": 30, "pointsToWin": 30, "numberOfTeams": 2, "skipPenaltyAfter": 3, "gameChangers": True, "name": "", "initiatorTeam": { "name": "team1" }, "teamData": [{ "name": "team1" }, { "name": "team2" }] } feedback = GameModel.isValidGame(self.session, gameData) self.assertFalse(feedback["valid"]) self.assertEqual(feedback["message"], 'game name must be between 2 and 255 characters') print( "\n\n*************Test add invalid turnDuration **************************\n\n" ) gameData = { "maxPlayersPerTeam": 2, "turnDuration": 0, "pointsToWin": 30, "numberOfTeams": 2, "skipPenaltyAfter": 3, "gameChangers": True, "name": "game123", "initiatorTeam": { "name": "team1" }, "teamData": [{ "name": "team1" }, { "name": "team2" }] } feedback = GameModel.isValidGame(self.session, gameData) self.assertFalse(feedback["valid"]) self.assertEqual(feedback["message"], "turn duration must be between 30 and 120 inclusive") print( "\n\n*************Test add invalid teams *****************************\n\n" ) gameData = { "maxPlayersPerTeam": 2, "turnDuration": 30, "pointsToWin": 30, "numberOfTeams": 0, "skipPenaltyAfter": 3, "gameChangers": True, "name": "game123", "initiatorTeam": { "name": "team1" }, "teamData": [] } feedback = GameModel.isValidGame(self.session, gameData) self.assertFalse(feedback["valid"]) self.assertEqual(feedback["message"], "number of teams must be between 2 and 5 inclusive") print( "\n\n*************Test add invalid players in one team *****************************\n\n" ) gameData = { "maxPlayersPerTeam": 10, "turnDuration": 30, "pointsToWin": 30, "numberOfTeams": 2, "skipPenaltyAfter": 3, "gameChangers": True, "name": "game123", "initiatorTeam": { "name": "team1" }, "teamData": [{ "name": "team1" }, { "name": "team2" }] } feedback = GameModel.isValidGame(self.session, gameData) self.assertFalse(feedback["valid"]) self.assertEqual( feedback["message"], "number of players in a team must be between 2 and 5 inclusive") print( "\n\n*************Test add invalid points to win *****************************\n\n" ) gameData = { "maxPlayersPerTeam": 2, "turnDuration": 30, "pointsToWin": 1, "numberOfTeams": 2, "skipPenaltyAfter": 3, "gameChangers": True, "name": "game123", "initiatorTeam": { "name": "team1" }, "teamData": [{ "name": "team1" }, { "name": "team2" }] } feedback = GameModel.isValidGame(self.session, gameData) self.assertFalse(feedback["valid"]) self.assertEqual(feedback["message"], "points to win must be between 10 and 60 inclusive")
def get(self): OoR_object = OoRModel.query().get() if OoR_object == None: OoR = [] else: OoR = OoR_object.players template_params = handle_user() if not 'admin' in template_params: self.redirect('/') # Delete All player Models players = PlayerModel.query() for player in players: player.key.delete() tournament_query = TournamentModel.query() tournaments = [] for t in tournament_query: tournaments.append(t) #sort tournaments.sort(key=lambda x: x.timestamp) for tournament in tournaments: #self.response.out.write(tournament.name + "<br>") matches = [] match_query = MatchModel.query(ancestor=tournament.key) for m in match_query: matches.append(m) matches.sort(key=lambda x: x.timestamp) for match in matches: player1 = match.player1 player2 = match.player2 winner = match.winner if player1 in OoR or player2 in OoR: continue # Find player1 Model player1_query = PlayerModel.query(PlayerModel.tag == player1) if player1_query.get() is not None: player1_object = player1_query.get() else: player1_object = PlayerModel() player1_object.tag = player1 player1_object.ranking = trueskill.Rating() player1_object.put() player1_object.lastActive = match.timestamp # Find player2 Model player2_query = PlayerModel.query(PlayerModel.tag == player2) if player2_query.get() is not None: player2_object = player2_query.get() else: player2_object = PlayerModel() player2_object.tag = player2 player2_object.ranking = trueskill.Rating() player2_object.put() player2_object.lastActive = match.timestamp #Run Rankings Algo player1_rate = player1_object.ranking player2_rate = player2_object.ranking #self.response.out.write(player1_rate) #self.response.out.write('<br>') #self.response.out.write(player2_rate) #self.response.out.write('<br>') if winner == player1: new_player1, new_player2 = trueskill.rate_1vs1( player1_rate, player2_rate) else: new_player2, new_player1 = trueskill.rate_1vs1( player2_rate, player1_rate) #self.response.out.write(new_player1) #self.response.out.write('<br>') #self.response.out.write(new_player2) #self.response.out.write('<br>') #self.response.out.write('<br>') # Update player stats player1_object.ranking = new_player1 player2_object.ranking = new_player2 #Save player1_object.put() player2_object.put() #self.response.out.write(match.player1+" vs. "+player2) #self.response.out.write('<br>') #self.response.out.write('<hl><br><br>') self.redirect('/')
def get(self): OoR_object = OoRModel.query().get() if OoR_object == None: OoR = [] else: OoR = OoR_object.players template_params = handle_user() if not 'admin' in template_params: self.redirect('/') # Delete All player Models players = PlayerModel.query() for player in players: player.key.delete() tournament_query = TournamentModel.query() tournaments = [] for t in tournament_query: tournaments.append(t) #sort tournaments.sort(key = lambda x: x.timestamp) for tournament in tournaments: #self.response.out.write(tournament.name + "<br>") matches = [] match_query = MatchModel.query(ancestor=tournament.key) for m in match_query: matches.append(m) matches.sort(key = lambda x: x.timestamp) for match in matches: player1 = match.player1 player2 = match.player2 winner = match.winner if player1 in OoR or player2 in OoR: continue # Find player1 Model player1_query = PlayerModel.query(PlayerModel.tag == player1) if player1_query.get() is not None: player1_object = player1_query.get() else: player1_object = PlayerModel() player1_object.tag = player1 player1_object.ranking = trueskill.Rating() player1_object.put() player1_object.lastActive = match.timestamp # Find player2 Model player2_query = PlayerModel.query(PlayerModel.tag == player2) if player2_query.get() is not None: player2_object = player2_query.get() else: player2_object = PlayerModel() player2_object.tag = player2 player2_object.ranking = trueskill.Rating() player2_object.put() player2_object.lastActive = match.timestamp #Run Rankings Algo player1_rate = player1_object.ranking player2_rate = player2_object.ranking #self.response.out.write(player1_rate) #self.response.out.write('<br>') #self.response.out.write(player2_rate) #self.response.out.write('<br>') if winner == player1: new_player1, new_player2 = trueskill.rate_1vs1(player1_rate, player2_rate) else: new_player2, new_player1 = trueskill.rate_1vs1(player2_rate, player1_rate) #self.response.out.write(new_player1) #self.response.out.write('<br>') #self.response.out.write(new_player2) #self.response.out.write('<br>') #self.response.out.write('<br>') # Update player stats player1_object.ranking = new_player1 player2_object.ranking = new_player2 #Save player1_object.put() player2_object.put() #self.response.out.write(match.player1+" vs. "+player2) #self.response.out.write('<br>') #self.response.out.write('<hl><br><br>') self.redirect('/')
def mutate(self, into, name): player = PlayerModel(name=name) db_session.add(player) db_session.commit() return InsertPlayer(player=player)