summaryrefslogtreecommitdiff
path: root/app/routes.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/routes.py')
-rw-r--r--app/routes.py121
1 files changed, 121 insertions, 0 deletions
diff --git a/app/routes.py b/app/routes.py
new file mode 100644
index 0000000..ce9b714
--- /dev/null
+++ b/app/routes.py
@@ -0,0 +1,121 @@
+from app import app
+from pandas import read_csv
+from app.forms import LoginForm
+from app.controller import Session
+from werkzeug.utils import secure_filename
+from flask import (
+ render_template,
+ request,
+ url_for,
+ Response,
+ flash,
+ redirect,
+ get_template_attribute,
+)
+from flask import render_template_string as render_string
+
+g = Session()
+
+
+@app.route("/", methods=["GET"])
+def home():
+ return render_template("index.j2", url_for=url_for)
+
+
+@app.route("/login", methods=["GET", "POST"])
+def login():
+ form = LoginForm()
+ if form.validate_on_submit():
+ flash(f"User {form.username} is requesting to login.")
+ return redirect("/")
+ return render_template("login.j2", form=form)
+
+
+@app.route("/control", methods=["GET"])
+def get_controls():
+ return render_template("controls.j2", courts=g.courts.all())
+
+
+@app.route("/propose", methods=["POST"])
+def get_random_games():
+ g.levels = int(request.form["levels"].split()[0])
+ g.teams = request.form["team"] == "Teams"
+ return render_template("games.j2", games=g.propose(), title="Proposal")
+
+
+@app.route("/confirm", methods=["POST"])
+def confirm_games():
+ return render_template("games.j2", games=g.confirm(), title=f"Round: {g.round()}")
+
+
+@app.route("/clear", methods=["POST"])
+def clear_games():
+ return render_template(
+ "games.j2", games=g.current_round(), title=f"Round: {g.round()}"
+ )
+
+
+@app.route("/reset", methods=["POST"])
+def reset_games():
+ return render_template("games.j2", games=g.reset(), title=f"Round: {g.round()}")
+
+
+@app.route("/player-toggle/<player_request>", methods=["POST"])
+def toggle_player(player_request):
+ id = int(player_request)
+ player = g.players.toggle(id)
+ button = get_template_attribute("macros.j2", "player_button")
+ return render_string("{{button(player)}}", player=player, button=button)
+
+
+@app.route("/players", methods=["GET"])
+def get_list_of_players():
+ return render_template(
+ "players.j2",
+ regulars=g.players.regulars(),
+ guests=g.players.guests(),
+ url_for=url_for,
+ )
+
+
+@app.route("/reset_players", methods=["POST"])
+def reset_all_players():
+ g.players.reset()
+ response = Response("Players reset!")
+ response.headers["HX-Refresh"] = "true"
+ return response
+
+@app.route("/update_players", methods=["POST"])
+def update_all_players():
+ file = request.files.get("players")
+ response = Response("File name or data has issues!", 400)
+ response.headers["HX-Refresh"] = "true"
+ if file is None:
+ return response
+ elif file.filename is None:
+ return response
+ file_name = secure_filename(file.filename)
+ try:
+ data = read_csv(file_name)
+ required_columns = ["id","first_name","last_name","level","team"]
+ if not all([item in data.columns for item in required_columns]):
+ raise ImportError(f"All columns aren't available in the data.")
+ except:
+ return response
+ g.players.update(data)
+ response = Response("Players updated!")
+ response.headers["HX-Refresh"] = "true"
+ return response
+
+
+@app.route("/court-toggle/<court_number>", methods=["POST"])
+def toggle_court(court_number):
+ id = int(court_number)
+ status = g.courts.toggle(id)
+ button = get_template_attribute("macros.j2", "court_button")
+ return render_string("{{button(id, status)}}", id=id, status=status, button=button)
+
+
+@app.route("/courts", methods=["GET"])
+def get_list_of_courts():
+ return render_template("courts.j2", courts=g.courts.all())