diff --git a/refimg.py b/refimg.py new file mode 100644 index 0000000..ff5e7d6 --- /dev/null +++ b/refimg.py @@ -0,0 +1,97 @@ +from wtforms import SubmitField, StringField, HiddenField, FileField, 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 Refimg in the database, and via sqlalchemy, connected to the DB as well +################################################################################ +class Refimg(db.Model): + id = db.Column(db.Integer, db.Sequence('refimg_id_seq'), primary_key=True ) + fname = db.Column(db.String(256), unique=True, nullable=False) + + def __repr__(self): + return "".format(self.id, self.fname ) + +################################################################################ +# Helper class that inherits a .dump() method to turn class Refimg into json / useful in jinja2 +################################################################################ +class RefimgSchema(ma.SQLAlchemyAutoSchema): + class Meta: + model = Refimg + ordered = True + +################################################################################ +# Helper class that defines a form for refimg, used to make html
, with field validation (via wtforms) +################################################################################ +class RefimgForm(FlaskForm): + id = HiddenField() +# fname = StringField('File name:', [validators.DataRequired()]) + fname = FileField('File name:') + submit = SubmitField('Save' ) + delete = SubmitField('Delete' ) + +################################################################################ +# Routes for refimg data +# +# /refimgs -> GET only -> prints out list of all refimgs +################################################################################ +@app.route("/refimgs", methods=["GET"]) +def refimgs(): + refimgs = Refimg.query.all() + return render_template("refimgs.html", refimgs=refimgs, alert=st.GetAlert(), message=st.GetMessage() ) + + +################################################################################ +# /refimg -> GET/POST -> creates a new refimg type and when created, takes you back to /refimgs +################################################################################ +@app.route("/refimg", methods=["GET", "POST"]) +def new_refimg(): + form = RefimgForm(request.form) + page_title='Create new Reference Image' + if 'fname' not in request.form: + return render_template("refimg.html", form=form, page_title=page_title ) + else: + refimg = Refimg( fname=request.form["fname"] ) + try: + db.session.add(refimg) + db.session.commit() + print(refimg) + st.SetMessage( "Created new Refimg ({})".format(refimg.fname) ) + return redirect( '/refimgs' ) + except SQLAlchemyError as e: + st.SetAlert( "danger" ) + st.SetMessage( "Failed to add Refimg: {}".format(e.orig) ) + return render_template("refimg.html", form=form, page_title=page_title, alert=st.GetAlert(), message=st.GetMessage() ) + +################################################################################ +# /refimg/ -> GET/POST(save or delete) -> shows/edits/delets a single +# refimg +################################################################################ +@app.route("/refimg/", methods=["GET", "POST"]) +def refimg(id): + form = RefimgForm(request.form) + page_title='Edit Reference Image' + if request.method == 'POST': + try: + refimg = Refimg.query.get(id) + if 'delete' in request.form: + st.SetMessage("Successfully deleted Refimg: ({})".format( refimg.fname ) ) + refimg = Refimg.query.filter(Refimg.id==id).delete() + if 'submit' in request.form and form.validate(): + st.SetMessage("Successfully Updated Refimg: (From: {})".format(refimg.fname)) + refimg.fname = request.form['fname'] + st.AppendMessage(" To: ({})".format(refimg.fname) ) + db.session.commit() + return redirect( '/refimgs' ) + except SQLAlchemyError as e: + st.SetAlert( "danger" ) + st.SetMessage( "Failed to modify Refimg: {}".format(e.orig) ) + return render_template("refimg.html", form=form, page_title=page_title, alert=st.GetAlert(), message=st.GetMessage() ) + else: + refimg = Refimg.query.get(id) + form = RefimgForm(request.values, obj=refimg) + return render_template("refimg.html", object=refimg, form=form, page_title = page_title, alert=st.GetAlert(), message=st.GetMessage() )