Skip to content

Commit c83cdbc

Browse files
committed
Adds UI
1 parent cc129a7 commit c83cdbc

10 files changed

+181
-0
lines changed

ui/app.py

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import dash_bootstrap_components as dbc
2+
from dash import Dash
3+
4+
LEAGUE = 209760
5+
POSITIONS = "QB, WR, WR, WR, RB, RB, TE, W/R/T, K, DEF, BN, BN, BN, BN, IR"
6+
TEAM = 8
7+
8+
app = Dash(
9+
__name__,
10+
external_stylesheets=[dbc.themes.BOOTSTRAP],
11+
prevent_initial_callbacks=True,
12+
title="ffbot",
13+
)
14+
server = app.server

ui/components/__init__.py

Whitespace-only changes.

ui/components/body.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import dash_bootstrap_components as dbc
2+
3+
from components.optimize import optimize
4+
from components.scrape import scrape
5+
6+
body = dbc.Container(
7+
[
8+
scrape,
9+
optimize,
10+
],
11+
fluid=True,
12+
)

ui/components/footer.py

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import dash_bootstrap_components as dbc
2+
from dash import html
3+
4+
footer = html.Footer(
5+
dbc.Container(
6+
html.P("© 2021 - Alex Marvin"),
7+
fluid=True,
8+
)
9+
)

ui/components/navbar.py

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import dash_bootstrap_components as dbc
2+
3+
navbar = dbc.NavbarSimple(
4+
brand="ffbot",
5+
brand_href="#",
6+
color="primary",
7+
dark=True,
8+
fluid=True,
9+
)

ui/components/optimize.py

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import dash_bootstrap_components as dbc
2+
import ffbot
3+
import pandas as pd
4+
from dash import Input, Output, State, dash_table, html
5+
from dash.dash_table.Format import Format, Scheme
6+
7+
from app import POSITIONS, TEAM, app
8+
9+
optimize = html.Div(
10+
[
11+
html.H1("Optimize"),
12+
dbc.Button(
13+
"Optimize",
14+
color="primary",
15+
id="optimize-button",
16+
),
17+
dash_table.DataTable(
18+
id="optimize-table",
19+
fill_width=False,
20+
filter_action="native",
21+
page_action="native",
22+
page_current=0,
23+
page_size=10,
24+
sort_action="native",
25+
style_as_list_view=True,
26+
),
27+
]
28+
)
29+
30+
31+
@app.callback(
32+
Output("optimize-table", "columns"),
33+
Output("optimize-table", "data"),
34+
Input("optimize-button", "n_clicks"),
35+
State("scrape-table", "data"),
36+
State("week", "children"),
37+
)
38+
def run_optimize(_, data, week):
39+
# Load data
40+
df = pd.DataFrame(data)
41+
week = int(week)
42+
43+
# Run optimizer
44+
df_opt = ffbot.optimize(df, week, TEAM, POSITIONS)
45+
columns_opt = [
46+
dict(id=i, name=i)
47+
if i in ["Add", "Drop"]
48+
else dict(
49+
format=Format(precision=2, scheme=Scheme.fixed),
50+
id=i,
51+
name=i,
52+
type="numeric",
53+
)
54+
for i in df_opt.columns
55+
]
56+
data_opt = df_opt.to_dict("records")
57+
return columns_opt, data_opt

ui/components/scrape.py

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import dash_bootstrap_components as dbc
2+
import ffbot
3+
from dash import Input, Output, dash_table, html
4+
5+
from app import app
6+
7+
scrape = html.Div(
8+
[
9+
html.H1("Scrape"),
10+
dbc.Row(
11+
dbc.Col(
12+
dbc.Button(
13+
"1. Scrape",
14+
className="me-1",
15+
color="primary",
16+
id="scrape-scrape-button",
17+
),
18+
),
19+
),
20+
html.Br(),
21+
dbc.Row(
22+
dbc.Col(
23+
dbc.Button(
24+
"2. Load",
25+
color="primary",
26+
id="scrape-load-button",
27+
),
28+
),
29+
),
30+
html.Div(
31+
[
32+
html.Span("Week "),
33+
html.Span(id="week"),
34+
]
35+
),
36+
dash_table.DataTable(
37+
id="scrape-table",
38+
filter_action="native",
39+
page_action="native",
40+
page_current=0,
41+
page_size=10,
42+
sort_action="native",
43+
style_as_list_view=True,
44+
style_table={'overflowX': 'auto'},
45+
),
46+
]
47+
)
48+
49+
50+
@app.callback(
51+
Output("week", "children"),
52+
Output("scrape-table", "columns"),
53+
Output("scrape-table", "data"),
54+
Input("scrape-load-button", "n_clicks"),
55+
)
56+
def load(_):
57+
df, week = ffbot.load()
58+
columns = [dict(id=i, name=i) for i in df.columns]
59+
data = df.to_dict("records")
60+
return week, columns, data

ui/data/.gitkeep

Whitespace-only changes.

ui/index.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from dash import html
2+
3+
from app import app
4+
from components.body import body
5+
from components.footer import footer
6+
from components.navbar import navbar
7+
8+
app.layout = html.Div(
9+
[
10+
navbar,
11+
body,
12+
footer,
13+
],
14+
)
15+
16+
if __name__ == "__main__":
17+
app.run_server(debug=True)

ui/requirements-ui.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
dash~=2.0
2+
dash-bootstrap-components~=1.0
3+
ffbot

0 commit comments

Comments
 (0)