from flask import Flask from flask_login import LoginManager, UserMixin from flask_sqlalchemy import SQLAlchemy from flask_talisman import Talisman from sqlalchemy import ForeignKey import sys from getMySQL import getMySQL import atexit from flask_apscheduler import APScheduler def create(testing: bool = False): """ Erstellt die Flask-App inkl. Datenbank und Login-Manager. :return app: """ app = Flask(__name__) dbpw = getMySQL()[1] dbun = getMySQL()[0] try: app.config['SECRET_KEY'] = sys.argv[1] # Den Secret Key bei Start mitgeben: routing.py SECRET_KEY_GOES HERE except IndexError: app.config['SECRET_KEY'] = "SECRET-KEY-GOES-HERE" app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://' + dbun + ':' + dbpw + '@localhost/paulmrtn_DUALHUB' db.init_app(app) login_manager = LoginManager() login_manager.init_app(app) login_manager.login_view = "login" # Shut down the scheduler when exiting the app if not testing: atexit.register(lambda: scheduler.shutdown()) @login_manager.user_loader def load_user(uid: int): return User.query.filter_by(id=uid).first() return app db = SQLAlchemy() class User(UserMixin, db.Model): """ Datenbank-Modell für User. """ __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(255), unique=True) name = db.Column(db.String(255)) kurs = db.Column(db.String(15)) class Dualis(db.Model): """ Datenbank-Modell für Dualis. """ __tablename__ = 'dualis' token = db.Column(db.String(255), unique=True) uid = db.Column(db.Integer, ForeignKey('user.id', ondelete='CASCADE'), primary_key=True) token_created = db.Column(db.Integer) semester = db.Column(db.String(15)) class Semesterlist(db.Model): """ Datenbank-Modell für Semester-Liste. """ __tablename__ = 'semesterlist' uid = db.Column(db.Integer, ForeignKey('user.id', ondelete='CASCADE')) semestername = db.Column(db.String(25)) semesterid = db.Column(db.String(15)) itemid = db.Column(db.Integer, primary_key=True) class Rapla(db.Model): """ Datenbank-Modell für Rapla. """ __tablename__ = 'rapla' name = db.Column(db.String(15), primary_key=True) file = db.Column(db.String(20), unique=True) link = db.Column(db.String(255), unique=True) class HiddenVL(db.Model): """ Datenbank-Modell für ausgeblendete Vorlesungen. """ __tablename__ = 'hiddenVL' uid = db.Column(db.Integer, ForeignKey('user.id', ondelete='CASCADE')) eventid = db.Column(db.String(255)) id = db.Column(db.String(255), primary_key=True) name = db.Column(db.String(255)) class Meals(db.Model): """ Datenbank-Modell für Meals. """ __tablename__ = 'meals' id = db.Column(db.Integer, primary_key=True) date = db.Column(db.Date) name = db.Column(db.String(200)) vegetarian = db.Column(db.Boolean) vegan = db.Column(db.Boolean) schwein = db.Column(db.Boolean) scheduler = APScheduler() flaskApp = create() with flaskApp.app_context(): print("Creating Tables....") db.create_all() def_src = ["*.paulmartin.cloud", '\'self\''] Talisman(flaskApp, content_security_policy={"default-src": def_src, "script-src": def_src # + ["'unsafe-inline'"] }) scheduler.init_app(flaskApp) scheduler.start() scheduler.api_enabled = True