File size: 3,606 Bytes
4774d56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
from Source.Predict import predict
from flask import Flask, render_template, jsonify, request, session
import requests
import pickle as pkl
import pandas as pd
import numpy as np
pd.set_option('display.max_columns', None)
pd.set_option('display.expand_frame_repr', False)

import json
with open('Source/Data/record.json','r') as f:
    record = json.load(f)
with open('Source/Data/lines.json','r') as f:
    lines = json.load(f)

app = Flask(__name__, template_folder="Templates", static_folder="Static", static_url_path="/Static")
app.config.update(
    SESSION_COOKIE_SECURE=True,
    SESSION_COOKIE_SAMESITE='None',
)
app.secret_key = 'green-flounder'

# get week, season
current_week, season = predict.get_week()
current_games = predict.get_games(current_week)[['Date','Away Team','Home Team']]
available_weeks = list(range(current_week+1))[3:]
available_weeks.reverse()

# load current data by default
@app.route('/')
def index():
    print('Current Week', current_week)
    session['selected_week'] = current_week

    for week in available_weeks:
        session[f'games_week_{week}'] = None

    session[f'games_week_{current_week}'] = current_games.to_json()
    return render_template('index.html', **record)

# send week list to front end
@app.route('/get_weeks')
def get_weeks():
    return jsonify(available_weeks)

# send lines to front end
@app.route('/get_lines')
def get_lines():
    try:
        return jsonify(lines[str(session.get('selected_week'))])
    except:
        return jsonify(lines[str(current_week)])

# send games of selected week to front end
@app.route('/get_games')
def get_games():
    requested_week = int(request.args.get('week'))
    session['selected_week'] = requested_week

    # If select a new week
    if requested_week and requested_week != current_week:
        print("Requested Week:", requested_week)
        # Check if that week's games are cached
        if session.get(f'games_week_{requested_week}'):
            print("Using cached games")
            print(session.get(f'games_week_{requested_week}'))
            games = session.get(f'games_week_{requested_week}')
            games = json.loads(games)
            return jsonify(games)
        else:
            games = predict.get_games(requested_week)[['Date','Away Team','Home Team']]
            session[f'games_week_{requested_week}'] = games.to_json(orient='records')
            return jsonify(games.to_dict(orient='records'))
    else:
        games = current_games
        return jsonify(games.to_dict(orient='records'))

# make predictions
@app.route('/submit_games', methods=['POST'])
def submit_games():
    data = request.json
    data = pd.DataFrame(data).replace('', np.nan).dropna()
    home_teams = data['HomeTeam'].values
    away_teams = data['AwayTeam'].values
    ou_lines = data['OverUnderLine'].values
    row_indices = data['rowIndex'].values
    
    moneylines = []
    over_unders = []
    for row_index,home,away,total in zip(row_indices,home_teams,away_teams,ou_lines):
        selected_week = session.get('selected_week')
        game_id, moneyline, over_under = predict.predict(home,away,season,selected_week,total)
        moneyline['rowIndex'] = int(row_index)
        over_under['rowIndex'] = int(row_index)
        moneylines.append(moneyline)
        over_unders.append(over_under)

    return jsonify({'moneylines': moneylines,
                    'over_unders': over_unders})
    
if __name__ == '__main__':
    app.run(host='0.0.0.0', port='7860', debug=True)