60 lines
2.3 KiB
Python
60 lines
2.3 KiB
Python
import os
|
|
from flask import Flask
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
from flask_caching import Cache
|
|
from werkzeug.middleware.profiler import ProfilerMiddleware
|
|
|
|
# Load local ENV variables (can be set when calling the executable)
|
|
ENABLE_TIMING: bool = False if os.getenv("DISABLE_TIMING") == "True" else True
|
|
print("Running Formula10 with:")
|
|
if not ENABLE_TIMING:
|
|
print("- Disabled timing constraints")
|
|
|
|
app: Flask = Flask(__name__)
|
|
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///formula10.db"
|
|
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
|
|
|
|
# Session cookie is used to propagate message to error page
|
|
app.config["SESSION_TYPE"] = "memcached"
|
|
app.config["SECRET_KEY"] = "ich stinke nach maggi"
|
|
|
|
app.url_map.strict_slashes = False
|
|
|
|
db: SQLAlchemy = SQLAlchemy()
|
|
db.init_app(app)
|
|
|
|
cache: Cache = Cache(config={"CACHE_TYPE": "SimpleCache"})
|
|
cache.init_app(app)
|
|
|
|
# app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=("/formula10/*",), sort_by=("cumtime",))
|
|
|
|
# NOTE: These imports are required to register the routes. They need to be imported after "app" is declared
|
|
import formula10.controller.race_controller # type: ignore
|
|
import formula10.controller.season_controller
|
|
import formula10.controller.leaderboard_controller
|
|
import formula10.controller.statistics_controller
|
|
import formula10.controller.rules_controller
|
|
import formula10.controller.admin_controller
|
|
import formula10.controller.error_controller
|
|
|
|
|
|
# TODO
|
|
# Large DB Update
|
|
# - Don't use names for frontend post requests, use IDs
|
|
# - For season guess calc there is missing: Fastest laps + sprint points + sprint DNFs (in race result)
|
|
# - Mask to allow changing usernames (easy if name is not used as ID)
|
|
# - Maybe even masks for races + drivers + teams?
|
|
# - DB fields for links to F1 site - NO: just hardcode them in with a dictionary
|
|
|
|
# Leaderboards/Points
|
|
# - Auto calculate season points (display season points in table + season guess card title?)
|
|
|
|
# Optimizations
|
|
# - Optimize PointsModel + TemplateModel. In case something is calculated often, cache it.
|
|
# - NEVER do manual DB queries, except in the DomainModel!
|
|
|
|
# General
|
|
# - Adapt diagram colors to team colors
|
|
# - Add links to the official F1 stats page (for quali/result), probably best to store entire link in DB (because they are not entirely regular)?
|
|
# - Unit testing (as much as possible, but especially points calculation)
|