Finish implementing data saving/loading
This commit is contained in:
@ -1,17 +1,26 @@
|
|||||||
import csv
|
import csv
|
||||||
|
import os.path
|
||||||
|
|
||||||
from model import *
|
from model import *
|
||||||
|
|
||||||
|
|
||||||
def load_csv(filename):
|
def load_csv(filename):
|
||||||
with open("init_data/" + filename + ".csv", "r", newline="") as file:
|
if not os.path.exists(filename):
|
||||||
|
print(f"Could not load data from file {filename}, as it doesn't exist!")
|
||||||
|
return []
|
||||||
|
|
||||||
|
with open(filename, "r", newline="") as file:
|
||||||
reader = csv.reader(file, delimiter=",")
|
reader = csv.reader(file, delimiter=",")
|
||||||
next(reader, None) # skip header
|
next(reader, None) # skip header
|
||||||
return list(reader)
|
return list(reader)
|
||||||
|
|
||||||
|
|
||||||
# @todo CSV-Writer
|
|
||||||
def write_csv(filename, objects):
|
def write_csv(filename, objects):
|
||||||
with open("dynamic_data/" + filename + ".csv", "w", newline="") as file:
|
if len(objects) == 0:
|
||||||
|
print(f"Could not write objects to file {filename}, as no objects were given!")
|
||||||
|
return
|
||||||
|
|
||||||
|
with open(filename, "w", newline="") as file:
|
||||||
writer = csv.writer(file, delimiter=",")
|
writer = csv.writer(file, delimiter=",")
|
||||||
writer.writerow(objects[0].__csv_header__)
|
writer.writerow(objects[0].__csv_header__)
|
||||||
for obj in objects:
|
for obj in objects:
|
||||||
@ -31,28 +40,59 @@ def reload_static_data(db):
|
|||||||
User.query.delete()
|
User.query.delete()
|
||||||
|
|
||||||
# Reload static data
|
# Reload static data
|
||||||
for row in load_csv("teams"):
|
for row in load_csv("static_data/teams.csv"):
|
||||||
db.session.add(Team().from_csv(row))
|
db.session.add(Team().from_csv(row))
|
||||||
for row in load_csv("drivers"):
|
for row in load_csv("static_data/drivers.csv"):
|
||||||
db.session.add(Driver().from_csv(row))
|
db.session.add(Driver().from_csv(row))
|
||||||
for row in load_csv("races"):
|
for row in load_csv("static_data/races.csv"):
|
||||||
db.session.add(Race().from_csv(row))
|
db.session.add(Race().from_csv(row))
|
||||||
for row in load_csv("users"):
|
for row in load_csv("static_data/users.csv"):
|
||||||
db.session.add(User().from_csv(row))
|
db.session.add(User().from_csv(row))
|
||||||
|
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
|
||||||
|
def reload_dynamic_data(db):
|
||||||
|
print("Initializing Database with Dynamic Values...")
|
||||||
|
|
||||||
|
# Clear dynamic data
|
||||||
|
User.query.delete()
|
||||||
|
RaceResult.query.delete()
|
||||||
|
RaceGuess.query.delete()
|
||||||
|
TeamWinners.query.delete()
|
||||||
|
PodiumDrivers.query.delete()
|
||||||
|
SeasonGuess.query.delete()
|
||||||
|
|
||||||
|
# Reload dynamic data
|
||||||
|
for row in load_csv("dynamic_data/users.csv"):
|
||||||
|
db.session.add(User().from_csv(row))
|
||||||
|
for row in load_csv("dynamic_data/raceresults.csv"):
|
||||||
|
db.session.add(RaceResult().from_csv(row))
|
||||||
|
for row in load_csv("dynamic_data/raceguesses.csv"):
|
||||||
|
db.session.add(RaceGuess().from_csv(row))
|
||||||
|
for row in load_csv("dynamic_data/teamwinners.csv"):
|
||||||
|
db.session.add(TeamWinners().from_csv(row))
|
||||||
|
for row in load_csv("dynamic_data/podiumdrivers.csv"):
|
||||||
|
db.session.add(PodiumDrivers().from_csv(row))
|
||||||
|
for row in load_csv("dynamic_data/seasonguesses.csv"):
|
||||||
|
db.session.add(SeasonGuess().from_csv(row))
|
||||||
|
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
|
||||||
def export_dynamic_data():
|
def export_dynamic_data():
|
||||||
print("Exporting Userdata...")
|
print("Exporting Userdata...")
|
||||||
|
|
||||||
|
users = User.query.all()
|
||||||
raceresults = RaceResult.query.all()
|
raceresults = RaceResult.query.all()
|
||||||
raceguesses = RaceGuess.query.all()
|
raceguesses = RaceGuess.query.all()
|
||||||
|
teamwinners = TeamWinners.query.all()
|
||||||
|
podiumdrivers = PodiumDrivers.query.all()
|
||||||
seasonguesses = SeasonGuess.query.all()
|
seasonguesses = SeasonGuess.query.all()
|
||||||
|
|
||||||
if len(raceresults) > 0:
|
write_csv("dynamic_data/users.csv", users)
|
||||||
write_csv("raceresults", raceresults)
|
write_csv("dynamic_data/raceresults.csv", raceresults)
|
||||||
if len(raceguesses) > 0:
|
write_csv("dynamic_data/raceguesses.csv", raceguesses)
|
||||||
write_csv("raceguesses", raceguesses)
|
write_csv("dynamic_data/teamwinners.csv", teamwinners)
|
||||||
if len(seasonguesses) > 0:
|
write_csv("dynamic_data/podiumdrivers.csv", podiumdrivers)
|
||||||
write_csv("seasonguesses", seasonguesses)
|
write_csv("dynamic_data/seasonguesses.csv", seasonguesses)
|
||||||
|
29
formula10.py
29
formula10.py
@ -3,7 +3,7 @@ from typing import List
|
|||||||
from flask import Flask, render_template, request, redirect
|
from flask import Flask, render_template, request, redirect
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
from model import *
|
from model import *
|
||||||
from database_utils import reload_static_data, export_dynamic_data
|
from database_utils import reload_static_data, reload_dynamic_data, export_dynamic_data
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
@ -28,14 +28,35 @@ def index():
|
|||||||
return redirect("/race")
|
return redirect("/race")
|
||||||
|
|
||||||
|
|
||||||
@app.route("/reload")
|
@app.route("/loadall")
|
||||||
|
def load():
|
||||||
|
reload_static_data(db)
|
||||||
|
reload_dynamic_data(db)
|
||||||
|
return redirect("/")
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/reloadall")
|
||||||
def reload():
|
def reload():
|
||||||
|
export_dynamic_data()
|
||||||
|
reload_static_data(db)
|
||||||
|
reload_dynamic_data(db)
|
||||||
|
return redirect("/")
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/reloadstatic")
|
||||||
|
def reloadstatic():
|
||||||
reload_static_data(db)
|
reload_static_data(db)
|
||||||
return redirect("/")
|
return redirect("/")
|
||||||
|
|
||||||
|
|
||||||
@app.route("/save")
|
@app.route("/reloaddynamic")
|
||||||
def save():
|
def reloaddynamic():
|
||||||
|
reload_dynamic_data(db)
|
||||||
|
return redirect("/")
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/savedynamic")
|
||||||
|
def savedynamic():
|
||||||
export_dynamic_data()
|
export_dynamic_data()
|
||||||
return redirect("/")
|
return redirect("/")
|
||||||
|
|
||||||
|
43
model.py
43
model.py
@ -8,15 +8,9 @@ import json
|
|||||||
|
|
||||||
db = SQLAlchemy()
|
db = SQLAlchemy()
|
||||||
|
|
||||||
|
#
|
||||||
class User(db.Model):
|
# Static Data (Defined in Backend)
|
||||||
__tablename__ = "user"
|
#
|
||||||
|
|
||||||
def from_csv(self, row):
|
|
||||||
self.name = str(row[0])
|
|
||||||
return self
|
|
||||||
|
|
||||||
name: Mapped[str] = mapped_column(String(32), primary_key=True)
|
|
||||||
|
|
||||||
|
|
||||||
class Race(db.Model):
|
class Race(db.Model):
|
||||||
@ -66,6 +60,27 @@ class Driver(db.Model):
|
|||||||
team: Mapped["Team"] = relationship("Team", foreign_keys=[team_id])
|
team: Mapped["Team"] = relationship("Team", foreign_keys=[team_id])
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Dynamic Data (Defined in Frontend)
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
class User(db.Model):
|
||||||
|
__tablename__ = "user"
|
||||||
|
__csv_header__ = ["name"]
|
||||||
|
|
||||||
|
def from_csv(self, row):
|
||||||
|
self.name = str(row[0])
|
||||||
|
return self
|
||||||
|
|
||||||
|
def to_csv(self):
|
||||||
|
return [
|
||||||
|
self.name
|
||||||
|
]
|
||||||
|
|
||||||
|
name: Mapped[str] = mapped_column(String(32), primary_key=True)
|
||||||
|
|
||||||
|
|
||||||
class RaceResult(db.Model):
|
class RaceResult(db.Model):
|
||||||
__tablename__ = "raceresult"
|
__tablename__ = "raceresult"
|
||||||
__csv_header__ = ["id", "race_id", "pxx_id", "dnf_id"]
|
__csv_header__ = ["id", "race_id", "pxx_id", "dnf_id"]
|
||||||
@ -74,7 +89,7 @@ class RaceResult(db.Model):
|
|||||||
self.id = int(row[0])
|
self.id = int(row[0])
|
||||||
self.race_id = int(row[1])
|
self.race_id = int(row[1])
|
||||||
self.pxx_id = str(row[2])
|
self.pxx_id = str(row[2])
|
||||||
self.dnf_id = str(row[22])
|
self.dnf_id = str(row[3])
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def to_csv(self):
|
def to_csv(self):
|
||||||
@ -130,17 +145,13 @@ class RaceGuess(db.Model):
|
|||||||
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id])
|
dnf: Mapped["Driver"] = relationship("Driver", foreign_keys=[dnf_id])
|
||||||
|
|
||||||
|
|
||||||
# Per season guesses: Hot, P2 Constructor, Most overtakes, Most DNFs, Team winner,
|
|
||||||
# At least 1 podium
|
|
||||||
|
|
||||||
|
|
||||||
class TeamWinners(db.Model):
|
class TeamWinners(db.Model):
|
||||||
__tablename__ = "teamwinners"
|
__tablename__ = "teamwinners"
|
||||||
__csv_header__ = ["id", "user_id", "winner_ids_json"]
|
__csv_header__ = ["id", "user_id", "winner_ids_json"]
|
||||||
|
|
||||||
def from_csv(self, row):
|
def from_csv(self, row):
|
||||||
self.id = int(row[0])
|
self.id = int(row[0])
|
||||||
self.user_id = int(row[1])
|
self.user_id = str(row[1])
|
||||||
self.winner_ids_json = str(row[2])
|
self.winner_ids_json = str(row[2])
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@ -183,7 +194,7 @@ class PodiumDrivers(db.Model):
|
|||||||
|
|
||||||
def from_csv(self, row):
|
def from_csv(self, row):
|
||||||
self.id = int(row[0])
|
self.id = int(row[0])
|
||||||
self.user_id = int(row[1])
|
self.user_id = str(row[1])
|
||||||
self.podium_ids_json = str(row[2])
|
self.podium_ids_json = str(row[2])
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user