from wtforms import SubmitField, StringField, HiddenField, validators, Form from flask_wtf import FlaskForm from flask import request, render_template, redirect from main import db, app, ma from sqlalchemy import Sequence from sqlalchemy.exc import SQLAlchemyError from status import st, Status ################################################################################ # Class describing Author in the database, and via sqlalchemy, connected to the DB as well ################################################################################ class Settings(db.Model): id = db.Column(db.Integer, db.Sequence('settings_id_seq'), primary_key=True ) name = db.Column(db.String, unique=True, nullable=True ) value = db.Column(db.String, unique=True, nullable=True ) def __repr__(self): return "".format(self.id, self.name, self.value) ############################################################################### # Helper class that inherits a .dump() method to turn class Author into json / useful in jinja2 ################################################################################ class SettingsSchema(ma.SQLAlchemyAutoSchema): class Meta: model = Settings ordered = True settings_schema=SettingsSchema() ################################################################################ # Helper class that defines a form for Settings, used to make html
# with field validation (via wtforms) ################################################################################ class SettingsForm(FlaskForm): id = HiddenField() name = StringField('Name:', [validators.DataRequired()]) value = StringField('value:', [validators.DataRequired()]) submit = SubmitField('Save' ) ################################################################################ # /settings -> show current settings ################################################################################ @app.route("/settings", methods=["GET"]) def settings(): sets = Settings.query.all() form = SettingsForm() page_title='Show Settings' return render_template("settings.html", objects=sets, form=form, page_title = page_title, alert=st.GetAlert(), message=st.GetMessage() ) ################################################################################ # /setting/ -> show current settings ################################################################################ @app.route("/setting/", methods=["GET", "POST"]) def setting(id): form = SettingsForm(request.form) if request.method == 'POST' and form.validate(): try: s = Settings.query.get(id) if 'submit' in request.form: st.SetMessage("Successfully Updated Setting (name={})".format(s.name) ) s.name = request.form['name'] s.value = request.form['value'] db.session.commit() return redirect( '/settings' ) except SQLAlchemyError as e: st.SetAlert( "danger" ) st.SetMessage( "Failed to modify Setting: {}".format(e.orig) ) return render_template("edit_setting.html", form=form, page_title=page_title, alert=st.GetAlert(), message=st.GetMessage() ) else: s = Settings.query.get(id) page_title='Edit Setting: {}'.format(s.name) form = SettingsForm(request.values, obj=s) return render_template("setting.html", objects=s, form=form, page_title = page_title, alert=st.GetAlert(), message=st.GetMessage() )