def addLeagueMatches(league, matchRequestQueue, matchResults): ais = Session.query(AI).join(LeagueAI).filter(LeagueAI.league_id ==\ league.league_id).all() map = Session.query(Map).filter(Map.map_id == league.map_id).first() mod = Session.query(Mod).filter(Mod.mod_id == league.mod_id).first() playAgainstSelf = league.play_against_self if league.side_modes == "xvsy": sides = [int(i) for i in league.sides.split("vs")] else: sides = [int(league.sides)] matchRequests = [] for i, ai0 in enumerate(ais[:-1]): for j, ai1 in enumerate(ais[i:]): if not playAgainstSelf and ai0.ai_id == ai1.ai_id: continue first = Session.query(ModSide).filter(ModSide.mod_side_id == sides[0]).first() if len(sides) == 2: second = Session.query(ModSide).filter(ModSide.mod_side_id == sides[1]).first() allSides = [(first, second), (second, first)] else: allSides = [(first, first)] for firstSide, secondSide in allSides: for k in xrange(league.matches_per_ai_pair): matchRequest = MatchRequest(ai0, ai1, map, mod,\ league.speed, league.soft_timeout, league.hard_timeout,\ firstSide, secondSide, league.league_id) matchRequests.append(matchRequest) #save all matches to the database Session.add_all(matchRequests) Session.commit()
def add(self): if not roles.isInRole(roles.leagueadmin): c.message = "You must be logged in as a leagueadmin" return render('genericmessage.html') leagueName = self.form_result["leagueName"] modId = self.form_result["modId"] mapId = self.form_result["mapId"] speed = self.form_result["speed"] softtimeout = self.form_result["softtimeout"] hardtimeout = self.form_result["hardtimeout"] nummatchesperaipair = self.form_result["nummatchesperaipair"] sides = self.form_result["sides"] sidemodes = self.form_result["sidemodes"] playagainstself = self.form_result["playagainstself"] account = Session.query(Account).filter(Account.username == session['user']).first() ais = [] for i in range(Session.query(AI).count()): ai_i = 'ai_checkbox_' + str(i) if (self.form_result.has_key(ai_i)): ais.append(i) league = League(leagueName, account, modId, mapId, nummatchesperaipair, speed, softtimeout, hardtimeout, sides, sidemodes, playagainstself) leagueais = [LeagueAI(ai, league) for ai in ais] Session.add(league) Session.add_all(leagueais) matchrequests = Session.query(MatchRequest).filter(MatchRequest.league_id ==\ league.league_id) matchresults = [req for req in matchrequests if req.matchresult != None] matchscheduler.addLeagueMatches(league, matchrequests, matchresults) Session.flush() Session.commit() redirect(url(controller='league', action='view', id=league.league_id))