Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds UI #55

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions ui/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import dash_bootstrap_components as dbc
from dash import Dash

LEAGUE = 209760
POSITIONS = "QB, WR, WR, WR, RB, RB, TE, W/R/T, K, DEF, BN, BN, BN, BN, IR"
TEAM = 8

app = Dash(
__name__,
external_stylesheets=[dbc.themes.BOOTSTRAP],
prevent_initial_callbacks=True,
title="ffbot",
)
server = app.server
Empty file added ui/components/__init__.py
Empty file.
11 changes: 11 additions & 0 deletions ui/components/body.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import dash_bootstrap_components as dbc
from components.optimize import optimize
from components.scrape import scrape

body = dbc.Container(
[
scrape,
optimize,
],
fluid=True,
)
9 changes: 9 additions & 0 deletions ui/components/footer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import dash_bootstrap_components as dbc
from dash import html

footer = html.Footer(
dbc.Container(
html.P("© 2021 - Alex Marvin"),
fluid=True,
)
)
9 changes: 9 additions & 0 deletions ui/components/navbar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import dash_bootstrap_components as dbc

navbar = dbc.NavbarSimple(
brand="ffbot",
brand_href="#",
color="primary",
dark=True,
fluid=True,
)
59 changes: 59 additions & 0 deletions ui/components/optimize.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import dash_bootstrap_components as dbc
import pandas as pd
from app import POSITIONS, TEAM, app
from dash import Input, Output, State, dash_table, html
from dash.dash_table.Format import Format, Scheme

import ffbot

optimize = html.Div(
[
html.H1("Optimize"),
dbc.Button(
"Optimize",
color="primary",
id="optimize-button",
),
dash_table.DataTable(
id="optimize-table",
fill_width=False,
filter_action="native",
page_action="native",
page_current=0,
page_size=10,
sort_action="native",
style_as_list_view=True,
),
]
)


@app.callback(
Output("optimize-table", "columns"),
Output("optimize-table", "data"),
Input("optimize-button", "n_clicks"),
State("scrape-table", "data"),
State("week", "children"),
)
def run_optimize(_, data, week):
# Load data
df = pd.DataFrame(data)
week = int(week)

# Run optimizer
df_opt = ffbot.optimize(df, week, TEAM, POSITIONS)
columns_opt = [
(
dict(id=i, name=i)
if i in ["Add", "Drop"]
else dict(
format=Format(precision=2, scheme=Scheme.fixed),
id=i,
name=i,
type="numeric",
)
)
for i in df_opt.columns
]
data_opt = df_opt.to_dict("records")
return columns_opt, data_opt
60 changes: 60 additions & 0 deletions ui/components/scrape.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import dash_bootstrap_components as dbc
from app import app
from dash import Input, Output, dash_table, html

import ffbot

scrape = html.Div(
[
html.H1("Scrape"),
dbc.Row(
dbc.Col(
dbc.Button(
"1. Scrape",
className="me-1",
color="primary",
id="scrape-scrape-button",
),
),
),
html.Br(),
dbc.Row(
dbc.Col(
dbc.Button(
"2. Load",
color="primary",
id="scrape-load-button",
),
),
),
html.Div(
[
html.Span("Week "),
html.Span(id="week"),
]
),
dash_table.DataTable(
id="scrape-table",
filter_action="native",
page_action="native",
page_current=0,
page_size=10,
sort_action="native",
style_as_list_view=True,
style_table={"overflowX": "auto"},
),
]
)


@app.callback(
Output("week", "children"),
Output("scrape-table", "columns"),
Output("scrape-table", "data"),
Input("scrape-load-button", "n_clicks"),
)
def load(_):
df, week = ffbot.load()
columns = [dict(id=i, name=i) for i in df.columns]
data = df.to_dict("records")
return week, columns, data
Empty file added ui/data/.gitkeep
Empty file.
16 changes: 16 additions & 0 deletions ui/index.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from app import app
from components.body import body
from components.footer import footer
from components.navbar import navbar
from dash import html

app.layout = html.Div(
[
navbar,
body,
footer,
],
)

if __name__ == "__main__":
app.run_server(debug=True)
3 changes: 3 additions & 0 deletions ui/requirements-ui.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
dash~=2.0
dash-bootstrap-components~=1.0
ffbot
Loading