contentmatcher/settings.py

65 lines
2.3 KiB
Python

from flask import flash, render_template, Blueprint, request, session
from create_db import User, get_session, get_engine
import json
bp = Blueprint('settings', __name__, url_prefix='/settings')
def get_settings(user_id):
"""get settings from db, turns it into a dict and returns it"""
Session = get_session()
with Session() as dbsession:
user = dbsession.query(User).get(user_id)
#tu rešujejo none user bug, ki se pojavi, ko na novo reg user, ni zazznan v querryju
# zdaj imamo problem clasha med globalno in lokalno spremenljivko "dbsession"
if user == None:
user = dbsession.query(User).get(user_id)
settings_db = user.settings
if settings_db == "":
#userji se zaenkrat generirajo brez settingsov aka empty string, zato dodamo te defaulte
settings_dict = {
"max_new" : 5,
"max_due" : 5,
"max_shared" : 5,
}
else:
settings_dict = json.loads(settings_db)
dbsession.close()
get_engine().dispose()
return settings_dict
@bp.route("/save_settings", methods=["GET", "POST"])
def save_settings():
"""takes a dict of settings turns it into json and updates the database with it"""
user_id = session['user_id']
username = session['username']
if request.method == "GET":
settings_old = get_settings(user_id)
return render_template("settings.html", username=username, settings=settings_old)
if request.method == "POST":
#request form stuff
settings_dict = {
"max_new" : request.form.get('max_new', False),
"max_due" : request.form.get('max_due', False),
"max_shared" : request.form.get('max_shared', False),
}
Session = get_session()
with Session() as dbsession:
settings_json = json.dumps(settings_dict)
user = dbsession.query(User).get(user_id)
user.settings = settings_json
dbsession.commit()
dbsession.close()
flash("settings updated")
get_engine().dispose()
return render_template("settings.html", username=username, settings=settings_dict)