Beispiel #1
0
def game_start(game_number):
    game = Games.get(Games.Game_Number == game_number)
    if session['commissioner'] and game.Status == 'Init':
        lineups = Lineups.select().where(Lineups.Game_Number == game.Game_Number).order_by(Lineups.Team, Lineups.Order.asc(), Lineups.Box.asc())
        raw_lineups = {}
        raw_lineups[game.Away.Team_Abbr],raw_lineups[game.Home.Team_Abbr] = [],[]
        for entry in lineups:
            player_update = {'Game_Number':game_number, 'Team':entry.Player.Team.Team_Abbr,'Player':entry.Player.Player_ID,'Box':entry.Box,'Order':entry.Order,'Position':entry.Position}
            raw_lineups[entry.Player.Team.Team_Abbr].append(player_update)
        valid, errors = validate_lineups(raw_lineups,game)
        if valid:
            calc.active_players(game)
            game.Status = 'Started'
            game.save()
            game_pas = All_PAs.select().where(All_PAs.Game_No == game.Game_Number).order_by(All_PAs.Play_No.desc())
            gamestats = stat_generator(game,lineups,game_pas)
            msg = reddit_boxscore_gen(game,lineups,game_pas,gamestats)
            reddit_thread = create_gamethread(game,msg)
            game.Reddit_Thread = reddit_thread
            game.PA_Timer = time.time()
            game.Step = 2
            game.save()
            msg2 = reddit_scorebug(game)
            webhook_functions.game_start(game)
        elif not valid:
            for error in errors: flash(error)
    return redirect(url_for('games_bp.game_manage',game_number=game_number))
Beispiel #2
0
def lineup_manage(game_number):
    form = LineupBoxForm()
    game = Games.get(Games.Game_Number == game_number)
    if game.Status == 'Staged' or game.Status == 'Final':
        return redirect(url_for('games_bp.game_manage',game_number=game_number))
    lineups = Lineups.select().where(Lineups.Game_Number == game.Game_Number).order_by(Lineups.Team, Lineups.Order.asc(), Lineups.Box.asc())
    if request.method == 'POST':
        if form.validate_on_submit():
            raw_lineups = {}
            raw_lineups[game.Away.Team_Abbr],raw_lineups[game.Home.Team_Abbr] = [],[]
            with db.atomic() as txn:
                with db.savepoint() as sp:
                    for entry in form.bop:
                        player = Lineups.get((Lineups.Player==entry.player_id.data) & (Lineups.Game_Number == game.Game_Number)).Player
                        player_update = {'Game_Number':game_number, 'Team':player.Team.Team_Abbr,'Player':player.Player_ID,'Box':entry.box.data,'Order':entry.order.data,'Position':entry.pos.data}
                        raw_lineups[player.Team.Team_Abbr].append(player_update)
                        Lineups.update(player_update).where((Lineups.Game_Number == game.Game_Number) & (Lineups.Player == player.Player_ID)).execute()
                    valid, errors = validate_lineups(raw_lineups,game)
                    if not valid:
#                        sp.rollback()
                        for error in errors: flash(error)
                    else:
                        calc.active_players(game)
        return redirect(url_for('games_bp.game_manage',game_number=game_number))
    else:
        for entry in lineups:
            form.bop.append_entry(data=lineup_populate(entry.Player,game))
    return render_template(
        'manage/lineup_manage.html',
        form = form,
        game = game,
        lineups = lineups
    )
Beispiel #3
0
def game_check():
    if request.method == 'POST':
        payload = request.get_json()
        game = Games.get(Games.Game_Number == payload['Game_Number'])
#        result = calc.play_check(game)
        calc.play_check(game,url=url_for('games_bp.game_manage',game_number=game.Game_Number,_external=True))
#        if result[0][3] == 'Steal':
#            result = calc.play_check(game)
    return redirect(url_for('index_bp.index'))
Beispiel #4
0
def game_init(game_number):
    game = Games.get(Games.Game_Number == game_number)
    if session['commissioner'] and game.Status == 'Staged':
        a_players = Players.select().where(Players.Team == game.Away.Team_Abbr)
        h_players = Players.select().where(Players.Team == game.Home.Team_Abbr)
        player_adds = []
        for player in a_players+h_players:
            player_add = {'Game_Number':game_number, 'Team':player.Team.Team_Abbr,'Player':player.Player_ID,'Box':0,'Order':0,'Position':'-'}
            player_adds.append(player_add)
        with db.atomic():
            Lineups.insert_many(player_adds).execute()
            game.Status = 'Init'
            game.save()
    return redirect(url_for('games_bp.game_manage',game_number=game_number))
Beispiel #5
0
def games_manage():
    game_list=Games.select()
    if session['umpire']:
        visible_games = []
        for game in game_list:
            if game.Umpires:
                if session['username'] in game.Umpires:
                    visible_games.append(game)
    if session['commissioner']:
        visible_games = game_list
    return render_template(
        'manage/games_manage.html',
        game_list=visible_games
    )
Beispiel #6
0
def game_creation(form):
    season = form.season.data
    session = form.session.data
    if len(str(form.session.data)) == 1:
        session = '0' + str(form.session.data)
    prefix = str(season) + str(session)
    max_no = Games.select(fn.MAX(Games.Game_Number)).where(Games.Game_Number ** (prefix+"%")).tuples()[0][0]
    if max_no == None:
        game_number = prefix + '01'
    else:
        game_number = str(int(max_no)+1)
    game_id = form.away.data + form.home.data + str(form.session.data)
    game_dict = {
        'Game_Number':game_number,
        'Game_ID':game_id,
        'Season':season,
        'Session':session,
        'Away':form.away.data,
        'Home':form.home.data,
        'Umpires':['dyslexda']} #hardcoded, need to fix
    with db.atomic():
        Games.create(**game_dict)
    return(game_number)
Beispiel #7
0
def game_page(game_number):
    game = Games.get(Games.Game_Number == game_number)
    lineups = Lineups.select().where(Lineups.Game_Number == game.Game_Number).order_by(Lineups.Team, Lineups.Order.asc(), Lineups.Box.asc())
    game_pas = All_PAs.select().where(All_PAs.Game_No == game.Game_Number).order_by(All_PAs.Play_No.desc())
    brc = brc_calc(game)
    gamestats = stat_generator(game,lineups,game_pas)
    thread_url = reddit_threadURL(game)
    return render_template(
        'game_page.html',
        game = game,
        brc = brc,
        lineups = lineups,
        game_pas = game_pas,
        gamestats = gamestats,
        thread_url = thread_url
    )
Beispiel #8
0
def calc_api_ranges(game_number):
    if request.method == 'POST':
        game = Games.get(Games.Game_Number == game_number)
        try:
            if request.form['bunt']:
                bunt = True
        except:
            bunt = False
        try:
            if request.form['infield_in']:
                if_i = True
        except:
            if_i = False
        ranges_html, result_list = calc_code(game, bunt, if_i)
        if request.form['pitch'] != '' and request.form['swing'] != '':
            diff = ranges_calc.calc_diff(int(request.form['pitch']),
                                         int(request.form['swing']))
            result = result_list[diff]
            ranges_html += "<br />"
            ranges_html += "<h5>Result</h5>"
            ranges_html += (f"<h6>{result}</h6>")
        return (ranges_html)
Beispiel #9
0
def game_manage(game_number):
    game = Games.get(Games.Game_Number == game_number)
    lineups = Lineups.select().where(Lineups.Game_Number == game.Game_Number).order_by(Lineups.Team, Lineups.Order.asc(), Lineups.Box.asc())
    game_pas = All_PAs.select().where(All_PAs.Game_No == game.Game_Number).order_by(All_PAs.Play_No.desc())
    brc = brc_calc(game)
    gamestats = stat_generator(game,lineups,game_pas)
    if request.method == 'POST':
        form = GameStatusForm()
        if form.validate_on_submit():
            auto = None
            game.Ump_Mode = form.ump_mode.data
            if form.status.data != '' and form.step.data != None: game.Status = form.status.data
            if form.step.data != '' and form.step.data != None: game.Step = int(form.step.data)
            game.save()
            if game.Step == 1:
                if form.ump_flavor.data != '':
                    with db.atomic():
                        game.Ump_Flavor = form.ump_flavor.data
                        game.save()
            elif game.Step == 2:
                if form.auto_options.data == 'Reset Timer':
                    game.Situation = None
                    if game.Steal_Timer:
                        game.Steal_Timer = time.time()
                    else:
                        game.PA_Timer = time.time()
                    game.save()
                elif form.auto_options.data == 'Process Auto':
                    auto = game.Situation
                else:
                    if form.r_steal.data != '' and form.runner.data != '' and not game.R_Steal:
                        webhook_functions.steal_start(game,form.runner.data)
                    try:
                        if form.bunt.data:
                            bunt = True
                        else:
                            bunt = False
                    except:
                        bunt = False
                    try:
                        if form.infield_in.data:
                            infield_in = True
                        else:
                            infield_in = False
                    except:
                        infield_in = False
                    with db.atomic():
                        if form.runner.data == '':
                            form.runner.data = None
                        game_update = {'Status':form.status.data, 'Pitch':form.pitch.data,'Swing':form.swing.data,'R_Steal':form.r_steal.data,'C_Throw':form.c_throw.data,'Runner':form.runner.data, 'Ump_Flavor':form.ump_flavor.data,'B_Flavor':form.b_flavor.data,'Bunt':bunt,'Infield_In':infield_in}
                        Games.update(game_update).where(Games.Game_Number == game.Game_Number).execute()
                        game = Games.get(Games.Game_Number == game_number)
            calc.play_process(game,auto)
        return redirect(url_for('games_bp.game_manage',game_number=game_number))
    else:
        form = GameStatusForm(data=game_populate(game))
    return render_template(
        'manage/game_manage.html',
        game = game,
        form = form,
        brc = brc,
        lineups = lineups,
        game_pas = game_pas,
        gamestats = gamestats,
        user = g.user
    )
Beispiel #10
0
def games():
    game_list = Games.select()
    return render_template(
        'games.html',
        game_list=game_list
    )