def post(self): plist = request.get_json()['player_list'] hgame = HistoricalGame(winteam="winners") game = Game(date=datetime.datetime.now(), inprog=False, historical=True, historical_game=hgame) models = [game, hgame] players = [] for player in plist: pmod = PlayerList.find_or_make_player(player['name']) players.append(pmod[0]) models.append(pmod[0]) team = "winners" if player['winner'] else "losers" pgame = PlayerGame(player=pmod[0], game=game, team=team) models.append(pgame) # Update the ranking object & leaderboard table. tr = TotalRanking.instance() with tr.lock: tr.process_game_record(*game_to_winners_losers(game)) db.session.add_all(models) db.session.commit() return {'msg': "Saved game: {}".format(game.json), 'saved': True}
def get_rankings_obj(): tr = TotalRanking.instance() all_games = HistoricalGame.query.all() print("Initting rankings...") for hgame in all_games: winners, losers = game_to_winners_losers(hgame.game) tr.process_game_record(winners, losers) return tr
def update_lboard(): # We just truncate and rebuild. Easier. db.session.query(Ranking).delete() pos = 1 for pname, ranking in TotalRanking.instance().player_rankings(): player = Player.query.filter_by(name=pname).first() r = Ranking(player_id=player.id, ranking=pos, mu=ranking.mu, sigma=ranking.sigma) db.session.add(r) pos += 1 db.session.commit() return jsonify({'success': True})
continue [self.players.add(x.strip().lower()) for x in row] self.records.append(row) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("csv_file") parser.add_argument("-p", "--post-to-srv", action="store_true", dest="post") args = parser.parse_args() csvp = CSVProcessor(args.csv_file) print(csvp.players) ranker = TotalRanking() for player in csvp.players: ranker.add_player(player) for record in csvp.records: wl_tup = player_list_to_win_loss_tuple(record) load = [{'name': p, 'winner': True} for p in wl_tup[0]] load += [{'name': p, 'winner': False} for p in wl_tup[1]] ranker.process_game_record(*wl_tup) if args.post: load = {'player_list': load} headers = {'Content-type': 'application/json'} r = requests.post("http://localhost:5000/historical_games", data=json.dumps(load), headers=headers) print("Total games: {}".format(ranker.total_games))
def get(self): rankings = TotalRanking.instance().player_rankings() return jsonify({"rankings": [(p, str(r)) for p, r in rankings]})