# -*- mode: python; -*- import inspect from flask import Blueprint, request, render_template, redirect, flash, jsonify from flask_login import login_required, current_user from .. import db from .. import models from . import forms from wtforms import SelectField common = Blueprint("common", __name__) @common.route("/modules//add/", methods=["GET", "POST"]) @login_required def add_item(module, table): """Add new item to table accessible via module.""" # print("db table keys are", db.metadata.tables.keys()) if table not in db.metadata.tables.keys(): return render_template("errors/item-not-found.html", table=table) form = getattr(forms, f"Add{table}")() if form.validate_on_submit(): model = getattr(models, table) table_fields = inspect.signature(model).parameters form_values = {key: request.form.get(key) for key in table_fields} print(f"Ready to insert in {table} from {module} {form_values}") record = model(**form_values) db.session.add(record) db.session.commit() item_pk = model.query.order_by(model.primary_key.desc()).first().primary_key flash(f"Successfully added item #{item_pk} to {table} table.", "info") return redirect("/fapg" + f"/modules/{module}") return render_template("modules/add-item.html", table=table, form=form) @common.route("/modules//edit/
/", methods=["GET", "POST"]) @login_required def edit_item(module, table, pk): """Edit existing item in table accessible via module.""" if table not in db.metadata.tables.keys(): return render_template("errors/item-not-found.html", table=table) model = getattr(models, table) item = model.query.filter_by(primary_key=pk).first() # Instantiate form with selected item's field values. form = getattr(forms, f"Add{table}")(**item.__dict__) if form.validate_on_submit(): table_fields = inspect.signature(model).parameters form_values = {key: request.form.get(key) for key in table_fields} print(f"Ready to update {form_values}") model.query.filter_by(primary_key=pk).update(form_values) db.session.commit() flash(f"Successfully edited item #{pk} in {table} table.", "info") return redirect("/fapg" + f"/modules/{module}") return render_template("modules/edit-item.html", table=table, pk=pk, form=form) @common.route("/modules//delete/
/", methods=["POST"]) @login_required def delete_item(module, table, pk): """Delete item with Primary Key = pk from table in module.""" model = getattr(models, table) record = model.query.filter_by(primary_key=pk).first() db.session.delete(record) db.session.commit() flash(f"Successfully removed item #{pk} from {table} table.", "info") return redirect("/fapg" + f"/modules/{module}") @common.route("/modules/settings") @login_required def settings(): return render_template("modules/settings.html", user=current_user)