Don't differentiate seasons

This commit is contained in:
2024-02-14 12:54:01 +01:00
parent 092308be19
commit ff9def9e4b
9 changed files with 154 additions and 175 deletions

View File

@ -1,23 +1,23 @@
name,team_id,country_code,active
NONE,NONE,NO,0
Max Verstappen,RedBull,NL,1
Sergio Perez,RedBull,MX,1
Lewis Hamilton,Mercedes,UK,1
George Russel,Mercedes,UK,1
Charles Leclerc,Ferrari,MC,1
Carlos Sainz,Ferrari,ES,1
Lando Norris,McLaren,UK,1
Oscar Piastri,McLaren,AU,1
Fernando Alonso,Aston Martin,ES,1
Lance Stroll,Aston Martin,CA,1
Pierre Gasly,Alpine,FR,1
Esteban Ocon,Alpine,FR,1
Alexander Albon,Williams,TH,1
Logan Sargeant,Williams,US,1
Yuki Tsunoda,AlphaTauri,JP,1
Daniel Ricciardo,AlphaTauri,AU,1
Valteri Bottas,Alfa Romeo,FL,1
Zhou Guanyu,Alfa Romeo,CN,1
Nico Hulkenberg,Haas,DE,1
Kevin Magnussen,Haas,DK,1
Nyck de Vries,AlphaTauri,NL,1
name,team_id,country_code
NONE,NONE,NO
Max Verstappen,RedBull,NL
Sergio Perez,RedBull,MX
Lewis Hamilton,Mercedes,UK
George Russel,Mercedes,UK
Charles Leclerc,Ferrari,MC
Carlos Sainz,Ferrari,ES
Lando Norris,McLaren,UK
Oscar Piastri,McLaren,AU
Fernando Alonso,Aston Martin,ES
Lance Stroll,Aston Martin,CA
Pierre Gasly,Alpine,FR
Esteban Ocon,Alpine,FR
Alexander Albon,Williams,TH
Logan Sargeant,Williams,US
Yuki Tsunoda,AlphaTauri,JP
Daniel Ricciardo,AlphaTauri,AU
Valteri Bottas,Alfa Romeo,FL
Zhou Guanyu,Alfa Romeo,CN
Nico Hulkenberg,Haas,DE
Kevin Magnussen,Haas,DK
Nyck de Vries,AlphaTauri,NL
1 name team_id country_code active
2 NONE NONE NO 0
3 Max Verstappen RedBull NL 1
4 Sergio Perez RedBull MX 1
5 Lewis Hamilton Mercedes UK 1
6 George Russel Mercedes UK 1
7 Charles Leclerc Ferrari MC 1
8 Carlos Sainz Ferrari ES 1
9 Lando Norris McLaren UK 1
10 Oscar Piastri McLaren AU 1
11 Fernando Alonso Aston Martin ES 1
12 Lance Stroll Aston Martin CA 1
13 Pierre Gasly Alpine FR 1
14 Esteban Ocon Alpine FR 1
15 Alexander Albon Williams TH 1
16 Logan Sargeant Williams US 1
17 Yuki Tsunoda AlphaTauri JP 1
18 Daniel Ricciardo AlphaTauri AU 1
19 Valteri Bottas Alfa Romeo FL 1
20 Zhou Guanyu Alfa Romeo CN 1
21 Nico Hulkenberg Haas DE 1
22 Kevin Magnussen Haas DK 1
23 Nyck de Vries AlphaTauri NL 1

View File

@ -1,20 +1,20 @@
id,user_id,race_id,season_id,p10_id,dnf_id,raceresult_id
1,Henri,1,2023,Valteri Bottas,Zhou Guanyu,1
2,Henri,2,2023,Valteri Bottas,Logan Sargeant,2
3,Henri,3,2023,Alexander Albon,Valteri Bottas,3
4,Henri,4,2023,Oscar Piastri,Nyck de Vries,4
5,Henri,5,2023,Esteban Ocon,Charles Leclerc,5
6,Henri,7,2023,Yuki Tsunoda,Charles Leclerc,6
7,Henri,8,2023,Charles Leclerc,Carlos Sainz,7
8,Henri,9,2023,Oscar Piastri,Kevin Magnussen,8
9,Henri,10,2023,Alexander Albon,NONE,9
10,Henri,11,2023,Pierre Gasly,Yuki Tsunoda,10
11,Henri,12,2023,Esteban Ocon,Kevin Magnussen,11
12,Henri,13,2023,Lance Stroll,Esteban Ocon,12
13,Henri,14,2023,Lance Stroll,Pierre Gasly,13
14,Henri,15,2023,Oscar Piastri,Alexander Albon,14
15,Henri,16,2023,Pierre Gasly,Logan Sargeant,15
16,Henri,17,2023,Fernando Alonso,Logan Sargeant,16
17,Henri,18,2023,Alexander Albon,Logan Sargeant,17
18,Henri,19,2023,Yuki Tsunoda,Logan Sargeant,18
19,Henri,20,2023,Valteri Bottas,Logan Sargeant,19
id,user_id,race_id,p10_id,dnf_id,raceresult_id
1,Henri,1,Valteri Bottas,Zhou Guanyu,1
2,Henri,2,Valteri Bottas,Logan Sargeant,2
3,Henri,3,Alexander Albon,Valteri Bottas,3
4,Henri,4,Oscar Piastri,Nyck de Vries,4
5,Henri,5,Esteban Ocon,Charles Leclerc,5
6,Henri,7,Yuki Tsunoda,Charles Leclerc,6
7,Henri,8,Charles Leclerc,Carlos Sainz,7
8,Henri,9,Oscar Piastri,Kevin Magnussen,8
9,Henri,10,Alexander Albon,NONE,9
10,Henri,11,Pierre Gasly,Yuki Tsunoda,10
11,Henri,12,Esteban Ocon,Kevin Magnussen,11
12,Henri,13,Lance Stroll,Esteban Ocon,12
13,Henri,14,Lance Stroll,Pierre Gasly,13
14,Henri,15,Oscar Piastri,Alexander Albon,14
15,Henri,16,Pierre Gasly,Logan Sargeant,15
16,Henri,17,Fernando Alonso,Logan Sargeant,16
17,Henri,18,Alexander Albon,Logan Sargeant,17
18,Henri,19,Yuki Tsunoda,Logan Sargeant,18
19,Henri,20,Valteri Bottas,Logan Sargeant,19
1 id user_id race_id season_id p10_id dnf_id raceresult_id
2 1 Henri 1 2023 Valteri Bottas Zhou Guanyu 1
3 2 Henri 2 2023 Valteri Bottas Logan Sargeant 2
4 3 Henri 3 2023 Alexander Albon Valteri Bottas 3
5 4 Henri 4 2023 Oscar Piastri Nyck de Vries 4
6 5 Henri 5 2023 Esteban Ocon Charles Leclerc 5
7 6 Henri 7 2023 Yuki Tsunoda Charles Leclerc 6
8 7 Henri 8 2023 Charles Leclerc Carlos Sainz 7
9 8 Henri 9 2023 Oscar Piastri Kevin Magnussen 8
10 9 Henri 10 2023 Alexander Albon NONE 9
11 10 Henri 11 2023 Pierre Gasly Yuki Tsunoda 10
12 11 Henri 12 2023 Esteban Ocon Kevin Magnussen 11
13 12 Henri 13 2023 Lance Stroll Esteban Ocon 12
14 13 Henri 14 2023 Lance Stroll Pierre Gasly 13
15 14 Henri 15 2023 Oscar Piastri Alexander Albon 14
16 15 Henri 16 2023 Pierre Gasly Logan Sargeant 15
17 16 Henri 17 2023 Fernando Alonso Logan Sargeant 16
18 17 Henri 18 2023 Alexander Albon Logan Sargeant 17
19 18 Henri 19 2023 Yuki Tsunoda Logan Sargeant 18
20 19 Henri 20 2023 Valteri Bottas Logan Sargeant 19

View File

@ -1,20 +1,20 @@
id,race_id,season_id,p10_id,dnf_id
1,1,2023,Alexander Albon,Oscar Piastri
2,2,2023,Kevin Magnussen,Lance Stroll
3,3,2023,Yuki Tsunoda,Charles Leclerc
4,4,2023,Yuki Tsunoda,Nyck de Vries
5,5,2023,Kevin Magnussen,NONE
6,7,2023,Oscar Piastri,Lance Stroll
7,8,2023,Pierre Gasly,NONE
8,9,2023,Valteri Bottas,Logan Sargeant
9,10,2023,Pierre Gasly,Nico Hulkenberg
10,11,2023,Carlos Sainz,Esteban Ocon
11,12,2023,Lance Stroll,Pierre Gasly
12,13,2023,Yuki Tsunoda,Oscar Piastri
13,14,2023,Esteban Ocon,Logan Sargeant
14,15,2023,Valteri Bottas,Esteban Ocon
15,16,2023,Kevin Magnussen,Yuki Tsunoda
16,17,2023,Pierre Gasly,Valteri Bottas
17,18,2023,Sergio Perez,Lewis Hamilton
18,19,2023,Logan Sargeant,Esteban Ocon
19,20,2023,Esteban Ocon,Sergio Perez
id,race_id,p10_id,dnf_id
1,1,Alexander Albon,Oscar Piastri
2,2,Kevin Magnussen,Lance Stroll
3,3,Yuki Tsunoda,Charles Leclerc
4,4,Yuki Tsunoda,Nyck de Vries
5,5,Kevin Magnussen,NONE
6,7,Oscar Piastri,Lance Stroll
7,8,Pierre Gasly,NONE
8,9,Valteri Bottas,Logan Sargeant
9,10,Pierre Gasly,Nico Hulkenberg
10,11,Carlos Sainz,Esteban Ocon
11,12,Lance Stroll,Pierre Gasly
12,13,Yuki Tsunoda,Oscar Piastri
13,14,Esteban Ocon,Logan Sargeant
14,15,Valteri Bottas,Esteban Ocon
15,16,Kevin Magnussen,Yuki Tsunoda
16,17,Pierre Gasly,Valteri Bottas
17,18,Sergio Perez,Lewis Hamilton
18,19,Logan Sargeant,Esteban Ocon
19,20,Esteban Ocon,Sergio Perez
1 id race_id season_id p10_id dnf_id
2 1 1 2023 Alexander Albon Oscar Piastri
3 2 2 2023 Kevin Magnussen Lance Stroll
4 3 3 2023 Yuki Tsunoda Charles Leclerc
5 4 4 2023 Yuki Tsunoda Nyck de Vries
6 5 5 2023 Kevin Magnussen NONE
7 6 7 2023 Oscar Piastri Lance Stroll
8 7 8 2023 Pierre Gasly NONE
9 8 9 2023 Valteri Bottas Logan Sargeant
10 9 10 2023 Pierre Gasly Nico Hulkenberg
11 10 11 2023 Carlos Sainz Esteban Ocon
12 11 12 2023 Lance Stroll Pierre Gasly
13 12 13 2023 Yuki Tsunoda Oscar Piastri
14 13 14 2023 Esteban Ocon Logan Sargeant
15 14 15 2023 Valteri Bottas Esteban Ocon
16 15 16 2023 Kevin Magnussen Yuki Tsunoda
17 16 17 2023 Pierre Gasly Valteri Bottas
18 17 18 2023 Sergio Perez Lewis Hamilton
19 18 19 2023 Logan Sargeant Esteban Ocon
20 19 20 2023 Esteban Ocon Sergio Perez

View File

@ -1,24 +1,24 @@
id,grandprix_id,season_id,number,date
1,Bahrain,2023,1,2023-03-05
2,Saudi Arabia,2023,2,2023-03-19
3,Melbourne,2023,3,2023-04-02
4,Baku,2023,4,2023-04-30
5,Miami,2023,5,2023-05-07
6,Imola,2023,6,2023-05-21
7,Monaco,2023,7,2023-05-28
8,Barcelona,2023,8,2023-06-04
9,Montreal,2023,9,2023-06-18
10,Spielberg,2023,10,2023-07-02
11,Silverstone,2023,11,2023-07-09
12,Budapest,2023,12,2023-07-23
13,Spa,2023,13,2023-07-30
14,Zandvoort,2023,14,2023-08-27
15,Monza,2023,15,2023-09-03
16,Singapore,2023,16,2023-09-17
17,Suzuka,2023,17,2023-09-24
18,Qatar,2023,18,2023-10-08
19,Austin,2023,19,2023-10-22
20,Mexico,2023,20,2023-10-29
21,Brazil,2023,21,2023-11-05
22,Las Vegas,2023,22,2023-11-18
23,Abu Dhabi,2023,23,2023-11-26
id,grandprix_id,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
1 id grandprix_id season_id number date
2 1 Bahrain 2023 1 2023-03-05
3 2 Saudi Arabia 2023 2 2023-03-19
4 3 Melbourne 2023 3 2023-04-02
5 4 Baku 2023 4 2023-04-30
6 5 Miami 2023 5 2023-05-07
7 6 Imola 2023 6 2023-05-21
8 7 Monaco 2023 7 2023-05-28
9 8 Barcelona 2023 8 2023-06-04
10 9 Montreal 2023 9 2023-06-18
11 10 Spielberg 2023 10 2023-07-02
12 11 Silverstone 2023 11 2023-07-09
13 12 Budapest 2023 12 2023-07-23
14 13 Spa 2023 13 2023-07-30
15 14 Zandvoort 2023 14 2023-08-27
16 15 Monza 2023 15 2023-09-03
17 16 Singapore 2023 16 2023-09-17
18 17 Suzuka 2023 17 2023-09-24
19 18 Qatar 2023 18 2023-10-08
20 19 Austin 2023 19 2023-10-22
21 20 Mexico 2023 20 2023-10-29
22 21 Brazil 2023 21 2023-11-05
23 22 Las Vegas 2023 22 2023-11-18
24 23 Abu Dhabi 2023 23 2023-11-26

View File

@ -1,3 +0,0 @@
year,active
2023,1
2024,0
1 year active
2 2023 1
3 2024 0

View File

@ -1,2 +1,2 @@
name,active
Henri,1
name
Henri

1 name active
2 Henri 1

View File

@ -1,17 +1,20 @@
import csv
from model import *
def load_csv(filename):
with open("data/" + filename + ".csv", newline="") as file:
reader = csv.reader(file, delimiter=",")
next(reader, None) # skip header
next(reader, None) # skip header
return list(reader)
# @todo CSV-Writer
def write_csv(filename):
with open("data/" + filename + ".csv", newline="") as file:
writer = csv.writer(file, delimiter=",")
# @todo Complete CSV Files
# @todo Reload Static Data
# Reload static database data, this has to be called from the app context
@ -24,7 +27,6 @@ def reload_static_data(db):
Team.query.delete()
Driver.query.delete()
GrandPrix.query.delete()
Season.query.delete()
Race.query.delete()
RaceResult.query.delete()
User.query.delete()
@ -37,8 +39,6 @@ def reload_static_data(db):
db.session.add(Driver().from_csv(row))
for row in load_csv("grandsprix"):
db.session.add(GrandPrix().from_csv(row))
for row in load_csv("seasons"):
db.session.add(Season().from_csv(row))
for row in load_csv("races"):
db.session.add(Race().from_csv(row))
for row in load_csv("raceresults"):
@ -50,6 +50,7 @@ def reload_static_data(db):
db.session.commit()
# @todo Export Dynamic Data
def export_dynamic_data():
pass
pass

View File

@ -13,12 +13,12 @@ db.init_app(app)
@app.route("/")
def index():
users = User.query.all()
raceresults = RaceResult.query.filter_by(season_id=2023).all()
raceresults = RaceResult.query.all()
guesses = dict()
for raceresult in raceresults:
guesses[raceresult.race_id] = dict()
for guess in Guess.query.filter_by(season_id=2023).all():
for guess in Guess.query.all():
guesses[guess.race_id][guess.user_id] = guess
return render_template("index.jinja", users=users, raceresults=raceresults, guesses=guesses)

133
model.py
View File

@ -5,97 +5,81 @@ from datetime import datetime
db = SQLAlchemy()
# Modeling these entities separately should make it easier to add new guess categories, for example team guesses or GP guesses
# This table contains metainformation about the GPs, not specific to seasons (can be reused).
# This table contains meta information about the GPs, not specific to seasons (can be reused).
class GrandPrix(db.Model):
__tablename__ = "grandprix"
def from_csv(self, row):
self.name = str(row[0])
self.name = str(row[0])
self.country_code = str(row[1])
return self
name: Mapped[str] = mapped_column(String(64), primary_key=True)
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
name: Mapped[str] = mapped_column(String(64), primary_key=True)
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
# This table contains season information
class Season(db.Model):
__tablename__ = "season"
def from_csv(self, row):
self.year = int(row[0])
self.active = bool(row[1])
return self
year: Mapped[int] = mapped_column(Integer, primary_key=True) # This is the year
active: Mapped[bool] = mapped_column(Boolean) # Only allow guessing the current season
# This table contains manifestations of GPs, with dates
class Race(db.Model):
__tablename__ = "race"
def from_csv(self, row):
self.id = int(row[0])
self.id = int(row[0])
self.grandprix_id = str(row[1])
self.season_id = int(row[2])
self.number = int(row[3])
self.date = datetime.strptime(row[4], "%Y-%m-%d")
self.number = int(row[2])
self.date = datetime.strptime(row[3], "%Y-%m-%d")
return self
id: Mapped[int] = mapped_column(Integer, primary_key=True)
grandprix_id: Mapped[str] = mapped_column(ForeignKey("grandprix.name"))
season_id: Mapped[int] = mapped_column(ForeignKey("season.year"))
number: Mapped[int] = mapped_column(Integer)
date: Mapped[datetime] = mapped_column(DateTime)
id: Mapped[int] = mapped_column(Integer, primary_key=True)
grandprix_id: Mapped[str] = mapped_column(ForeignKey("grandprix.name"))
number: Mapped[int] = mapped_column(Integer)
date: Mapped[datetime] = mapped_column(DateTime)
grandprix: Mapped["GrandPrix"] = relationship("GrandPrix", foreign_keys=[grandprix_id])
grandprix: Mapped["GrandPrix"] = relationship("GrandPrix", foreign_keys=[grandprix_id])
season: Mapped["Season"] = relationship("Season", foreign_keys=[season_id])
# This table contains teams, e.g. RedBull
class Team(db.Model):
__tablename__ = "team"
def from_csv(self, row):
self.name = str(row[0])
self.name = str(row[0])
self.country_code = str(row[1])
return self
name: Mapped[str] = mapped_column(String(32), primary_key=True)
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
name: Mapped[str] = mapped_column(String(32), primary_key=True)
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
# This table contains drivers and their team associations, e.g. Max Verschtappen
class Driver(db.Model):
__tablename__ = "driver"
def from_csv(self, row):
self.name = str(row[0])
self.team_id = str(row[1])
self.name = str(row[0])
self.team_id = str(row[1])
self.country_code = str(row[2])
self.active = bool(row[3])
return self
name: Mapped[str] = mapped_column(String(32), primary_key=True)
team_id: Mapped[str] = mapped_column(ForeignKey("team.name"))
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
active: Mapped[bool] = mapped_column(Boolean) # Only allow guessing active drivers
name: Mapped[str] = mapped_column(String(32), primary_key=True)
team_id: Mapped[str] = mapped_column(ForeignKey("team.name"))
country_code: Mapped[str] = mapped_column(String(2)) # alpha-2 code
team: Mapped["Team"] = relationship("Team", foreign_keys=[team_id])
team: Mapped["Team"] = relationship("Team", foreign_keys=[team_id])
class RaceResult(db.Model):
__tablename__ = "raceresult"
def from_csv(self, row):
self.id = int(row[0])
self.race_id = str(row[1])
self.season_id = int(row[2])
self.p10_id = str(row[3])
self.dnf_id = str(row[4])
self.id = int(row[0])
self.race_id = str(row[1])
self.p10_id = str(row[2])
self.dnf_id = str(row[3])
return self
id: Mapped[int] = mapped_column(Integer, primary_key=True)
race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
season_id: Mapped[int] = mapped_column(ForeignKey("season.year"))
id: Mapped[int] = mapped_column(Integer, primary_key=True)
race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
# These map to drivers
# p01_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
@ -107,7 +91,7 @@ class RaceResult(db.Model):
# p07_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
# p08_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
# p09_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
p10_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
p10_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
# p11_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
# p12_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
# p13_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
@ -118,10 +102,9 @@ class RaceResult(db.Model):
# p18_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
# p19_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
# p20_id: Mapped[int] = mapped_column(ForeignKey("driver.id"))
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
season: Mapped["Season"] = relationship("Season", foreign_keys=[season_id]) # Redundant but should make things easier
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
# p01: Mapped["Driver"] = relationship("Driver", foreign_keys=[p01_id]) # Store all places to allow adding guesses
# p02: Mapped["Driver"] = relationship("Driver", foreign_keys=[p02_id])
@ -132,7 +115,7 @@ class RaceResult(db.Model):
# p07: Mapped["Driver"] = relationship("Driver", foreign_keys=[p07_id])
# p08: Mapped["Driver"] = relationship("Driver", foreign_keys=[p08_id])
# p09: Mapped["Driver"] = relationship("Driver", foreign_keys=[p09_id])
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
# p11: Mapped["Driver"] = relationship("Driver", foreign_keys=[p11_id])
# p12: Mapped["Driver"] = relationship("Driver", foreign_keys=[p12_id])
# p13: Mapped["Driver"] = relationship("Driver", foreign_keys=[p13_id])
@ -143,45 +126,43 @@ class RaceResult(db.Model):
# p18: Mapped["Driver"] = relationship("Driver", foreign_keys=[p18_id])
# p19: Mapped["Driver"] = relationship("Driver", foreign_keys=[p19_id])
# p20: Mapped["Driver"] = relationship("Driver", foreign_keys=[p20_id])
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id]) # Only store first DNF
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id]) # Only store first DNF
# This table contains users that can guess
class User(db.Model):
__tablename__ = "user"
def from_csv(self, row):
self.name = str(row[0])
self.active = bool(row[1])
self.name = str(row[0])
return self
name: Mapped[str] = mapped_column(String(32), primary_key=True)
active: Mapped[bool] = mapped_column(Boolean) # Only show active users
name: Mapped[str] = mapped_column(String(32), primary_key=True)
# This table contains guesses made by users
class Guess(db.Model):
__tablename__ = "guess"
def from_csv(self, row):
self.id = int(row[0])
self.user_id = str(row[1])
self.race_id = str(row[2])
self.season_id = int(row[3])
self.p10_id = str(row[4])
self.dnf_id = str(row[5])
self.raceresult_id = int(row[6])
self.id = int(row[0])
self.user_id = str(row[1])
self.race_id = str(row[2])
self.p10_id = str(row[3])
self.dnf_id = str(row[4])
self.raceresult_id = int(row[5])
return self
id: Mapped[int] = mapped_column(Integer, primary_key=True)
user_id: Mapped[str] = mapped_column(ForeignKey("user.name"))
race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
season_id: Mapped[int] = mapped_column(ForeignKey("season.year"))
p10_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
raceresult_id: Mapped[int] = mapped_column(ForeignKey("raceresult.id"))
id: Mapped[int] = mapped_column(Integer, primary_key=True)
user_id: Mapped[str] = mapped_column(ForeignKey("user.name"))
race_id: Mapped[str] = mapped_column(ForeignKey("race.id"))
p10_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
dnf_id: Mapped[str] = mapped_column(ForeignKey("driver.name"))
raceresult_id: Mapped[int] = mapped_column(ForeignKey("raceresult.id"))
user: Mapped["User"] = relationship("User", foreign_keys=[user_id])
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
season: Mapped["Season"] = relationship("Season", foreign_keys=[season_id]) # Redundant but should make things easier
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id])
raceresult: Mapped["RaceResult"] = relationship("RaceResult", foreign_keys=[raceresult_id])
user: Mapped["User"] = relationship("User", foreign_keys=[user_id])
race: Mapped["Race"] = relationship("Race", foreign_keys=[race_id])
p10: Mapped["Driver"] = relationship("Driver", foreign_keys=[p10_id])
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id])
raceresult: Mapped["RaceResult"] = relationship("RaceResult", foreign_keys=[raceresult_id])