Files
DualHub/init.py

102 lines
2.6 KiB
Python

from flask import Flask
from flask_login import LoginManager, UserMixin
from flask_sqlalchemy import SQLAlchemy
from flask_talisman import Talisman
from get_mysql import get_mysql
import atexit
from flask_apscheduler import APScheduler
def create():
"""
Erstellt die Flask-App inkl. Datenbank und Login-Manager.
:return app:
"""
app = Flask(__name__)
dbpw = get_mysql()[1]
dbun = get_mysql()[0]
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
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.
"""
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.
"""
token = db.Column(db.String(255), unique=True)
uid = db.Column(db.Integer, 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.
"""
uid = db.Column(db.Integer)
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.
"""
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 Meals(db.Model):
"""
Datenbank-Modell für 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()
app = create()
with app.app_context():
print("Creating Tables....")
db.create_all()
def_src = ["*.paulmartin.cloud", '\'self\'']
Talisman(app, content_security_policy={"default-src": def_src, "script-src": def_src # + ["'unsafe-inline'"]
})
scheduler.init_app(app)
scheduler.start()
scheduler.api_enabled = True