From e83a40ee5291fea42ad0ef0e36f9fa7fbd6551c3 Mon Sep 17 00:00:00 2001 From: Damien De Paoli Date: Tue, 12 Jan 2021 18:32:47 +1100 Subject: [PATCH] converted over to a flat settings table, no more key-value pairs of settings --- files.py | 9 ++++---- settings.py | 50 +++++++++++++++++++---------------------- templates/setting.html | 25 --------------------- templates/settings.html | 31 ++++++++++++++++--------- 4 files changed, 47 insertions(+), 68 deletions(-) delete mode 100644 templates/setting.html diff --git a/files.py b/files.py index 4446faf..6247be7 100644 --- a/files.py +++ b/files.py @@ -97,10 +97,9 @@ class FileData(): # multiple valid paths in import_path) # ############################################################################## def GenerateFileData(self): - import_path = Settings.query.filter(Settings.name=="import_path").all()[0].value - last_import_date_obj = Settings.query.filter(Settings.name=="last_import_date").all() - last_import_date = float(last_import_date_obj[0].value) - paths= import_path.split("#") + settings = Settings.query.all() + last_import_date = settings[0].last_import_date + paths = settings[0].import_path.split("#") for path in paths: print( "GenerateFileData: Checking {}".format( path ) ) @@ -144,7 +143,7 @@ class FileData(): db.session.add(file_obj) else: print( "{} - {} is OLDER than {}".format( file, stat.st_ctime, last_import_date ) ) - last_import_date_obj[0].value = str(time.time()) + settings[0].last_import_date = time.time() db.session.commit() self.view_list = Files.query.all() return self diff --git a/settings.py b/settings.py index 8f1a4a1..f2a1acc 100644 --- a/settings.py +++ b/settings.py @@ -1,4 +1,4 @@ -from wtforms import SubmitField, StringField, HiddenField, validators, Form +from wtforms import SubmitField, StringField, FloatField, HiddenField, validators, Form from flask_wtf import FlaskForm from flask import request, render_template, redirect from main import db, app, ma @@ -11,13 +11,13 @@ from status import st, Status ################################################################################ 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 ) + import_path = db.Column(db.String) + last_import_date = db.Column(db.Float) def __repr__(self): - return "".format(self.id, self.name, self.value) + return "".format(self.id, self.import_path, self.last_import_date) -############################################################################### +################################################################################ # Helper class that inherits a .dump() method to turn class Author into json / useful in jinja2 ################################################################################ class SettingsSchema(ma.SQLAlchemyAutoSchema): @@ -25,7 +25,7 @@ class SettingsSchema(ma.SQLAlchemyAutoSchema): model = Settings ordered = True -settings_schema=SettingsSchema() +settings_schema = SettingsSchema(many=True) ################################################################################ # Helper class that defines a form for Settings, used to make html
@@ -33,41 +33,37 @@ settings_schema=SettingsSchema() ################################################################################ class SettingsForm(FlaskForm): id = HiddenField() - name = StringField('Name:', [validators.DataRequired()]) - value = StringField('value:', [validators.DataRequired()]) + import_path = StringField('Path to import from:', [validators.DataRequired()]) + last_import_date = FloatField('Date of last import:', [validators.DataRequired()]) submit = SubmitField('Save' ) ################################################################################ # /settings -> show current settings ################################################################################ -@app.route("/settings", methods=["GET"]) +@app.route("/settings", methods=["GET", "POST"]) 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: + # HACK, I don't really need an id here, but sqlalchemy get weird + # without one, so just grab the id of the only row there, it will + # do... + id = Settings.query.all()[0].id 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'] + st.SetMessage("Successfully Updated Settings" ) + s.import_path = request.form['import_path'] + s.last_import_date = request.form['last_import_date'] 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() ) + page_title='Show Settings' + return render_template("settings.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() ) + tmp_sets = Settings.query.all() + sets = settings_schema.dump( tmp_sets ) + form = SettingsForm(obj=tmp_sets[0]) + page_title='Show Settings' + return render_template("settings.html", form=form, page_title = page_title, alert=st.GetAlert(), message=st.GetMessage() ) diff --git a/templates/setting.html b/templates/setting.html deleted file mode 100644 index 843da7c..0000000 --- a/templates/setting.html +++ /dev/null @@ -1,25 +0,0 @@ -{% extends "base.html" %} {% block main_content %} -
-

{{page_title}}

-
- - {% for field in form %} - {% if field.type == 'HiddenField' or field.type == 'CSRFTokenField' %} - {{field}} - {% elif field.type != 'SubmitField' %} -
- {{ field.label( class="col-lg-2" ) }} - {{ field( class="form-control col-lg-4" ) }} -
- {% endif %} - {% endfor %} -
-
-
-
- {{ form.submit( class="btn btn-primary offset-lg-2 col-lg-2" )}} -
- -
-
-{% endblock main_content %} diff --git a/templates/settings.html b/templates/settings.html index 2ac004a..70dd336 100644 --- a/templates/settings.html +++ b/templates/settings.html @@ -1,13 +1,22 @@ {% extends "base.html" %} {% block main_content %} -
-

{{page_title}}

-
- - - {% for obj in objects %} - - {% endfor %} -
NameValue
{{obj.name}}{{obj.value}}
-
-
+
+

{{page_title}}

+
+
+ {% for field in form %} + {% if field.type == 'HiddenField' or field.type == 'CSRFTokenField' %} + {{field}}
+ {% elif field.type != 'SubmitField' %} +
+ {{ field.label( class="col-lg-2" ) }} + {{ field( class="form-control col-lg-10" ) }} +
+ {% endif %} + {% endfor %} +
+ {{form.submit(class="btn btn-primary offset-lg-2 col-lg-2" )}} +
+
+
+ {% endblock main_content %}