Implement adding race guesses
This commit is contained in:
61
formula10.py
61
formula10.py
@ -32,31 +32,62 @@ def save():
|
||||
def race():
|
||||
users = User.query.all()
|
||||
raceresults = RaceResult.query.all()
|
||||
drivers = Driver.query.all()
|
||||
|
||||
guesses = dict()
|
||||
guesses = dict() # The guesses for which raceresults exist
|
||||
nextguesses = dict() # The guesses that are still open for modification
|
||||
for raceresult in raceresults:
|
||||
guesses[raceresult.race_id] = dict()
|
||||
for guess in RaceGuess.query.all():
|
||||
guesses[guess.race_id][guess.user_id] = guess
|
||||
if guess.race_id in guesses:
|
||||
guesses[guess.race_id][guess.user_id] = guess
|
||||
else:
|
||||
nextguesses[guess.user_id] = guess
|
||||
|
||||
# TODO: Getting by ID might be stupid, get by date instead?
|
||||
nextid = raceresults[-1].race_id + 1 if len(raceresults) > 0 else 1
|
||||
nextrace = Race.query.filter_by(id=nextid).first()
|
||||
|
||||
return render_template("race.jinja",
|
||||
users=users,
|
||||
drivers=drivers,
|
||||
raceresults=raceresults,
|
||||
guesses=guesses)
|
||||
guesses=guesses,
|
||||
nextguesses=nextguesses,
|
||||
nextrace=nextrace)
|
||||
|
||||
|
||||
# @app.route("/teams", methods=["GET", "POST"])
|
||||
# def teams():
|
||||
# if request.method == "POST":
|
||||
# new_team = Team(
|
||||
# name = request.form["name"],
|
||||
# country_code = request.form["country_code"]
|
||||
# )
|
||||
# print(new_team.name, new_team.country_code)
|
||||
# db.session.add(new_team)
|
||||
# db.session.commit()
|
||||
#
|
||||
# return render_template("teams.jinja", page="teams")
|
||||
@app.route("/guessrace/<raceid>/<username>", methods=["POST"])
|
||||
def guessrace(raceid, username):
|
||||
pxx = request.form.get("pxxselect")
|
||||
dnf = request.form.get("dnfselect")
|
||||
|
||||
if pxx is None or dnf is None:
|
||||
return redirect("/race")
|
||||
|
||||
raceguess: RaceGuess | None = RaceGuess.query.filter_by(user_id=username, race_id=raceid).first()
|
||||
|
||||
if raceguess is not None:
|
||||
raceguess.pxx_id = pxx
|
||||
raceguess.dnf_id = dnf
|
||||
else:
|
||||
raceguess = RaceGuess()
|
||||
raceguess.user_id = username
|
||||
raceguess.race_id = raceid
|
||||
|
||||
raceguess.pxx_id = pxx
|
||||
raceguess.dnf_id = dnf
|
||||
|
||||
db.session.add(raceguess)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return redirect("/race")
|
||||
|
||||
|
||||
@app.route("/enterresult")
|
||||
def enterresult():
|
||||
return render_template("enterresult.jinja")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
@ -1,24 +1,24 @@
|
||||
id,grandprix,number,date
|
||||
1,Bahrain,1,2023-03-05
|
||||
2,Saudi Arabia,2,2023-03-19
|
||||
3,Melbourne,3,2023-04-02
|
||||
4,Baku,4,2023-04-30
|
||||
5,Miami,5,2023-05-07
|
||||
6,Imola,6,2023-05-21
|
||||
7,Monaco,7,2023-05-28
|
||||
8,Barcelona,8,2023-06-04
|
||||
9,Montreal,9,2023-06-18
|
||||
10,Spielberg,10,2023-07-02
|
||||
11,Silverstone,11,2023-07-09
|
||||
12,Budapest,12,2023-07-23
|
||||
13,Spa,13,2023-07-30
|
||||
14,Zandvoort,14,2023-08-27
|
||||
15,Monza,15,2023-09-03
|
||||
16,Singapore,16,2023-09-17
|
||||
17,Suzuka,17,2023-09-24
|
||||
18,Qatar,18,2023-10-08
|
||||
19,Austin,19,2023-10-22
|
||||
20,Mexico,20,2023-10-29
|
||||
21,Brazil,21,2023-11-05
|
||||
22,Las Vegas,22,2023-11-18
|
||||
23,Abu Dhabi,23,2023-11-26
|
||||
id,grandprix,number,date,pxx
|
||||
1,Bahrain,1,2023-03-05,3
|
||||
2,Saudi Arabia,2,2023-03-19,17
|
||||
3,Melbourne,3,2023-04-02,5
|
||||
4,Baku,4,2023-04-30,6
|
||||
5,Miami,5,2023-05-07,15
|
||||
6,Imola,6,2023-05-21,8
|
||||
7,Monaco,7,2023-05-28,9
|
||||
8,Barcelona,8,2023-06-04,13
|
||||
9,Montreal,9,2023-06-18,11
|
||||
10,Spielberg,10,2023-07-02,12
|
||||
11,Silverstone,11,2023-07-09,18
|
||||
12,Budapest,12,2023-07-23,12
|
||||
13,Spa,13,2023-07-30,13
|
||||
14,Zandvoort,14,2023-08-27,3
|
||||
15,Monza,15,2023-09-03,6
|
||||
16,Singapore,16,2023-09-17,10
|
||||
17,Suzuka,17,2023-09-24,11
|
||||
18,Qatar,18,2023-10-08,3
|
||||
19,Austin,19,2023-10-22,11
|
||||
20,Mexico,20,2023-10-29,17
|
||||
21,Brazil,21,2023-11-05,14
|
||||
22,Las Vegas,22,2023-11-18,8
|
||||
23,Abu Dhabi,23,2023-11-26,5
|
|
9
model.py
9
model.py
@ -24,12 +24,14 @@ class Race(db.Model):
|
||||
self.grandprix = str(row[1])
|
||||
self.number = int(row[2])
|
||||
self.date = datetime.strptime(row[3], "%Y-%m-%d")
|
||||
self.pxx = int(row[4])
|
||||
return self
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||
grandprix: Mapped[str] = mapped_column(String(32))
|
||||
number: Mapped[int] = mapped_column(Integer)
|
||||
date: Mapped[datetime] = mapped_column(DateTime)
|
||||
pxx: Mapped[int] = mapped_column(Integer)
|
||||
|
||||
|
||||
class Team(db.Model):
|
||||
@ -303,7 +305,7 @@ class RaceGuess(db.Model):
|
||||
self.dnf_id = str(row[4])
|
||||
return self
|
||||
|
||||
def to_csv(self, writer):
|
||||
def to_csv(self):
|
||||
return [
|
||||
self.id,
|
||||
self.user_id,
|
||||
@ -330,9 +332,12 @@ class SeasonGuess(db.Model):
|
||||
__csv_header__ = ["id", "user_id", "hot_take"]
|
||||
|
||||
def from_csv(self, row):
|
||||
self.id = int(row[0])
|
||||
self.user_id = str(row[1])
|
||||
self.hot_take = str(row[2])
|
||||
return self
|
||||
|
||||
def to_csv(self, writer):
|
||||
def to_csv(self):
|
||||
return [
|
||||
self.id,
|
||||
self.user_id,
|
||||
|
@ -1,62 +1,104 @@
|
||||
{% extends 'base.jinja' %}
|
||||
|
||||
{% set active_page = "raceguessresults" %}
|
||||
{% set active_page = "race" %}
|
||||
|
||||
{% block title %}Formula 10{% endblock title %}
|
||||
|
||||
{% block body %}
|
||||
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" rowspan="3" class="text-center">Race</th>
|
||||
<th scope="col" colspan="{{ users | length * 2 }}" class="text-center">Call</th>
|
||||
<th scope="col" rowspan="2" colspan="2" class="text-center">Result</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{# Users List #}
|
||||
<tr>
|
||||
<td> </td>
|
||||
|
||||
{% for user in users %}
|
||||
<td colspan="2" class="text-center">{{ user.name }}</td>
|
||||
{% endfor %}
|
||||
|
||||
<td colspan="2"> </td>
|
||||
</tr>
|
||||
|
||||
{# P10/DNF Header #}
|
||||
<tr>
|
||||
<td> </td>
|
||||
|
||||
{% for user in users %}
|
||||
<td class="text-center">P10</td>
|
||||
<td class="text-center">DNF</td>
|
||||
{% endfor %}
|
||||
|
||||
<td class="text-center">P10</td>
|
||||
<td class="text-center">DNF</td>
|
||||
</tr>
|
||||
|
||||
{# Race Results #}
|
||||
{% for raceresult in raceresults %}
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>{{ raceresult.race.grandprix }}</td>
|
||||
<th scope="col" rowspan="2" class="text-center">Race</th>
|
||||
<th scope="col" colspan="{{ users | length }}" class="text-center">Call</th>
|
||||
<th scope="col" rowspan="2" class="text-center">Result</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
{# Users List #}
|
||||
<tr>
|
||||
<td> </td>
|
||||
|
||||
{% for user in users %}
|
||||
{% set p10 = guesses.get(raceresult.race_id).get(user.name).p10.abbr %}
|
||||
{% set dnf = guesses.get(raceresult.race_id).get(user.name).dnf.abbr %}
|
||||
<td class="{% if p10 == raceresult.p10.abbr %}text-success fw-bold{% endif %}">{{ p10 }}</td>
|
||||
<td class="{% if dnf == raceresult.dnf.abbr %}text-success fw-bold{% endif %}">{{ dnf }}</td>
|
||||
<td class="text-center">{{ user.name }}</td>
|
||||
{% endfor %}
|
||||
|
||||
<td>{{ raceresult.p10.abbr }}</td>
|
||||
<td class="{% if raceresult.dnf.abbr == 'NON' %}text-muted{% endif %}">{{ raceresult.dnf.abbr }}</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{# Race Results #}
|
||||
{% for raceresult in raceresults %}
|
||||
<tr>
|
||||
<td>{{ raceresult.race.grandprix }}</td>
|
||||
|
||||
{% for user in users %}
|
||||
{% set pxx = guesses.get(raceresult.race_id).get(user.name).pxx.abbr %}
|
||||
{% set dnf = guesses.get(raceresult.race_id).get(user.name).dnf.abbr %}
|
||||
<td>
|
||||
<ul class="list-group-flush">
|
||||
<li class="list-group-item {% if pxx == raceresult.pxx.abbr %}text-success fw-bold{% endif %}">
|
||||
P{{ raceresult.race.pxx }}: {{ pxx }}</li>
|
||||
<li class="list-group-item {% if dnf == raceresult.dnf.abbr %}text-success fw-bold{% endif %}">
|
||||
DNF: {{ dnf }}</li>
|
||||
</ul>
|
||||
</td>
|
||||
{% endfor %}
|
||||
|
||||
|
||||
<td>
|
||||
<ul class="list-group-flush">
|
||||
<li class="list-group-item">PXX: {{ pxx }}</li>
|
||||
<li class="list-group-item {% if raceresult.dnf.abbr == 'NON' %}text-muted{% endif %}">
|
||||
DNF: {{ raceresult.dnf.abbr }}</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
{# Next Race Guess #}
|
||||
{% if nextrace is not none %}
|
||||
<tr>
|
||||
<td>{{ nextrace.grandprix }}</td>
|
||||
|
||||
{% for user in users %}
|
||||
<td>
|
||||
<form action="/guessrace/{{ nextrace.id }}/{{ user.name }}" method="post">
|
||||
{# Driver PXX Select #}
|
||||
<div class="form-floating">
|
||||
<select name="pxxselect" class="form-select" aria-label="Select PXX">
|
||||
<option value="" selected disabled hidden></option>
|
||||
{% for driver in drivers %}
|
||||
<option {% if (user.name in nextguesses) and (nextguesses.get(user.name).pxx.abbr == driver.abbr) %}selected{% endif %}
|
||||
value="{{ driver.name }}">{{ driver.abbr }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<label for="pxxselect" class="text-primary">P{{ nextrace.pxx }}:</label>
|
||||
</div>
|
||||
|
||||
{# Driver DNF Select #}
|
||||
<div class="form-floating mt-2">
|
||||
<select name="dnfselect" class="form-select" aria-label="Select DNF">
|
||||
<option value="" selected disabled hidden></option>
|
||||
{% for driver in drivers %}
|
||||
<option {% if (user.name in nextguesses) and (nextguesses.get(user.name).dnf.abbr == driver.abbr) %}selected{% endif %}
|
||||
value="{{ driver.name }}">{{ driver.abbr }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<label for="dnfselect" class="text-primary">DNF:</label>
|
||||
</div>
|
||||
|
||||
<input type="submit" class="btn btn-primary mt-2 w-100" value="Save">
|
||||
</form>
|
||||
</td>
|
||||
{% endfor %}
|
||||
|
||||
<td> </td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{% endblock body %}
|
Reference in New Issue
Block a user