def getCompleteGameInfo(gameId): """Returns a dictionary of game info. Format specified in google doc TODO """ # TODO game specific info. we only have summoner specific data for now. gameInfo = [] gameResults = mongo_dao.getResultsForGameId(gameId) for gameResult in gameResults: summonerId = gameResult['userId'] gameInfo.append(getSummonerStatsForGameId(gameId, summonerId)) return gameInfo
def getSummonerStatsForGameId(gameId, summonerId, summonerName=None): """ Champion Win? Level KDA CS Jungle creeps killed Gold earned Damage dealt to champions Damage taken Wards placed """ summonerStats = {} if summonerName is None: summonerName = mongo_dao.getSummonerNameFromId( summonerId) # TODO REMOVE THIS API CALL gameResults = mongo_dao.getResultsForGameId(gameId) gameResult = _getResultFromGameResultsBySummonerId(gameResults, summonerId) if gameResult is None: return None statsArray = gameResult['statistics']['array'] summonerStats['Summoner'] = summonerName summonerStats['Game ID'] = gameId summonerStats['Game Date'] = str( _convertUtcDatetimeStringToDatetimeWithTimeZone( gameResult['createDate'], DEFAULT_TIME_ZONE)) summonerStats['Champion'] = legendaryapi.getChampionNameFromId( gameResult['championId']) summonerStats['Won'] = _getStatisticByName(statsArray, WIN) == 1 summonerStats['Level'] = _getStatisticByName(statsArray, LEVEL) summonerStats['Kills'] = _getStatisticByName(statsArray, KILLS) summonerStats['Deaths'] = _getStatisticByName(statsArray, DEATHS) summonerStats['Assists'] = _getStatisticByName(statsArray, ASSISTS) summonerStats['Jungle Monsters Killed'] = _getStatisticByName( statsArray, JUNGLE_MONSTERS_KILLED) summonerStats['Minions Killed'] = _getStatisticByName( statsArray, MINIONS_KILLED) + summonerStats['Jungle Monsters Killed'] summonerStats['Gold Earned'] = _getStatisticByName(statsArray, GOLD_EARNED) summonerStats['Damage Dealt To Champions'] = _getStatisticByName( statsArray, DAMAGE_DEALT_TO_CHAMPIONS) summonerStats['Damage Taken'] = _getStatisticByName( statsArray, DAMAGE_TAKEN) summonerStats['Wards Placed'] = _getStatisticByName( statsArray, WARDS_PLACED) return summonerStats
def getAllSummonerWinRates(minGames=1): summonerWinrates = [] summonerWinrateDict = {} for gameId in mongo_dao.getAllGameIds(): for gameResult in mongo_dao.getResultsForGameId(gameId): statsArray = gameResult['statistics']['array'] summonerId = gameResult['userId'] summonerName = mongo_dao.getSummonerNameFromId(summonerId) won = _getStatisticByName(statsArray, WIN) == 1 try: summonerWinrateEntry = summonerWinrateDict[summonerName] if won: summonerWinrateEntry[ 'Wins'] = summonerWinrateEntry['Wins'] + 1 else: summonerWinrateEntry[ 'Losses'] = summonerWinrateEntry['Losses'] + 1 except KeyError: summonerWinrateEntry = {} summonerWinrateEntry['Summoner'] = summonerName summonerWinrateEntry['Wins'] = 1 if won else 0 summonerWinrateEntry[ 'Losses'] = 1 - summonerWinrateEntry['Wins'] summonerWinrateDict[summonerName] = summonerWinrateEntry for summonerName, summonerWinrateEntry in summonerWinrateDict.iteritems(): # calculate winrates wins = summonerWinrateEntry['Wins'] losses = summonerWinrateEntry['Losses'] totalGames = wins + losses if totalGames < minGames: continue summonerWinrates.append(summonerWinrateEntry) if losses == 0: summonerWinrateEntry['Winrate'] = 1.0 else: summonerWinrateEntry['Winrate'] = 1.0 * wins / totalGames return sorted( summonerWinrates, key=lambda summonerWinrateEntry: summonerWinrateEntry['Winrate'], reverse=True)
def getAllGamesWithDate(): """Returns a list of tuples of (game date, game id) """ gameList = [] gameIds = mongo_dao.getAllGameIds() for gameId in gameIds: # the time is stored in game results gameResults = mongo_dao.getResultsForGameId(gameId) # we only need one game result to get the time, so break after 1 for gameResult in gameResults: createDateString = gameResult['createDate'] createDatetime = _convertUtcDatetimeStringToDatetimeWithTimeZone(createDateString, DEFAULT_TIME_ZONE) gameList.append((str(createDatetime), gameId)) break # sort return sorted(gameList, key=lambda game: game[0])
def getAllSummonerWinRates(minGames=1): summonerWinrates = [] summonerWinrateDict = {} for gameId in mongo_dao.getAllGameIds(): for gameResult in mongo_dao.getResultsForGameId(gameId): statsArray = gameResult['statistics']['array'] summonerId = gameResult['userId'] summonerName = mongo_dao.getSummonerNameFromId(summonerId) won = _getStatisticByName(statsArray, WIN) == 1 try: summonerWinrateEntry = summonerWinrateDict[summonerName] if won: summonerWinrateEntry['Wins'] = summonerWinrateEntry['Wins'] + 1 else: summonerWinrateEntry['Losses'] = summonerWinrateEntry['Losses'] + 1 except KeyError: summonerWinrateEntry = {} summonerWinrateEntry['Summoner'] = summonerName summonerWinrateEntry['Wins'] = 1 if won else 0 summonerWinrateEntry['Losses'] = 1 - summonerWinrateEntry['Wins'] summonerWinrateDict[summonerName] = summonerWinrateEntry for summonerName, summonerWinrateEntry in summonerWinrateDict.iteritems(): # calculate winrates wins = summonerWinrateEntry['Wins'] losses = summonerWinrateEntry['Losses'] totalGames = wins + losses if totalGames < minGames: continue summonerWinrates.append(summonerWinrateEntry) if losses == 0: summonerWinrateEntry['Winrate'] = 1.0 else: summonerWinrateEntry['Winrate'] = 1.0 * wins / totalGames return sorted(summonerWinrates, key=lambda summonerWinrateEntry: summonerWinrateEntry['Winrate'], reverse=True)
def getBlueSideWins(): blueSideWins = 0 gameIds = mongo_dao.getAllGameIds() for gameId in gameIds: gameResults = mongo_dao.getResultsForGameId(gameId) for gameResult in gameResults: win = _didPlayerWinFromResult(gameResult) teamId = gameResult['teamId'] if win: if teamId == BLUE_TEAM_ID: blueSideWins = blueSideWins + 1 else: if teamId == PURPLE_TEAM_ID: blueSideWins = blueSideWins + 1 break # we only need 1 result to figure out who wins return blueSideWins
def getAllGamesWithDate(): """Returns a list of tuples of (game date, game id) """ gameList = [] gameIds = mongo_dao.getAllGameIds() for gameId in gameIds: # the time is stored in game results gameResults = mongo_dao.getResultsForGameId(gameId) # we only need one game result to get the time, so break after 1 for gameResult in gameResults: createDateString = gameResult['createDate'] createDatetime = _convertUtcDatetimeStringToDatetimeWithTimeZone( createDateString, DEFAULT_TIME_ZONE) gameList.append((str(createDatetime), gameId)) break # sort return sorted(gameList, key=lambda game: game[0])
def getSummonerStatsForGameId(gameId, summonerId, summonerName=None): """ Champion Win? Level KDA CS Jungle creeps killed Gold earned Damage dealt to champions Damage taken Wards placed """ summonerStats = {} if summonerName is None: summonerName = mongo_dao.getSummonerNameFromId(summonerId) # TODO REMOVE THIS API CALL gameResults = mongo_dao.getResultsForGameId(gameId) gameResult = _getResultFromGameResultsBySummonerId(gameResults, summonerId) if gameResult is None: return None statsArray = gameResult['statistics']['array'] summonerStats['Summoner'] = summonerName summonerStats['Game ID'] = gameId summonerStats['Game Date'] = str(_convertUtcDatetimeStringToDatetimeWithTimeZone(gameResult['createDate'], DEFAULT_TIME_ZONE)) summonerStats['Champion'] = legendaryapi.getChampionNameFromId(gameResult['championId']) summonerStats['Won'] = _getStatisticByName(statsArray, WIN) == 1 summonerStats['Level'] = _getStatisticByName(statsArray, LEVEL) summonerStats['Kills'] = _getStatisticByName(statsArray, KILLS) summonerStats['Deaths'] = _getStatisticByName(statsArray, DEATHS) summonerStats['Assists'] = _getStatisticByName(statsArray, ASSISTS) summonerStats['Jungle Monsters Killed'] = _getStatisticByName(statsArray, JUNGLE_MONSTERS_KILLED) summonerStats['Minions Killed'] = _getStatisticByName(statsArray, MINIONS_KILLED) + summonerStats['Jungle Monsters Killed'] summonerStats['Gold Earned'] = _getStatisticByName(statsArray, GOLD_EARNED) summonerStats['Damage Dealt To Champions'] = _getStatisticByName(statsArray, DAMAGE_DEALT_TO_CHAMPIONS) summonerStats['Damage Taken'] = _getStatisticByName(statsArray, DAMAGE_TAKEN) summonerStats['Wards Placed'] = _getStatisticByName(statsArray, WARDS_PLACED) return summonerStats
def getStatsForSummoners(summoners): if len(summoners) <= 1: return None gameIds = mongo_dao.getGameIdsWithSummonersOnSameTeam(summoners) gameResults = [] for gameId in gameIds: gameResults.extend(mongo_dao.getResultsForGameId(gameId)) # prune gameResults down to results only including 1 summoner summonerId = mongo_dao.getSummonerIdFromName(summoners[0]) gameResults = [ gameResult for gameResult in gameResults if gameResult['userId'] == summonerId ] print len(gameResults) stats = {} stats['summoners'] = summoners stats['wins'] = 0 stats['losses'] = 0 for gameResult in gameResults: if _getStatisticByNameFromGameResult(gameResult, WIN) == 1: stats['wins'] += 1 else: stats['losses'] += 1 # calculate winrate if stats['wins'] == 0: stats['winrate'] = 0 elif stats['losses'] == 0: stats['winrate'] = 1.0 else: stats['winrate'] = 1.0 * stats['wins'] / len(gameResults) return stats
def getStatsForSummoners(summoners): if len(summoners) <= 1: return None gameIds = mongo_dao.getGameIdsWithSummonersOnSameTeam(summoners) gameResults = [] for gameId in gameIds: gameResults.extend(mongo_dao.getResultsForGameId(gameId)) # prune gameResults down to results only including 1 summoner summonerId = mongo_dao.getSummonerIdFromName(summoners[0]) gameResults = [gameResult for gameResult in gameResults if gameResult['userId'] == summonerId] print len(gameResults) stats = {} stats['summoners'] = summoners stats['wins'] = 0 stats['losses'] = 0 for gameResult in gameResults: if _getStatisticByNameFromGameResult(gameResult, WIN) == 1: stats['wins'] += 1 else: stats['losses'] += 1 # calculate winrate if stats['wins'] == 0: stats['winrate'] = 0 elif stats['losses'] == 0: stats['winrate'] = 1.0 else: stats['winrate'] = 1.0 * stats['wins'] / len(gameResults) return stats