moved class Refimg to person, and ditched all other routes/direct access to ref images, they are only a part of Person in UI now

This commit is contained in:
2021-07-05 16:51:44 +10:00
parent aabf4b2c8f
commit 2e06c0b285
6 changed files with 12 additions and 133 deletions

3
ai.py
View File

@@ -6,8 +6,7 @@ from sqlalchemy import Sequence
from sqlalchemy.exc import SQLAlchemyError
from status import st, Status
from files import Entry, File
from person import Person, PersonRefimgLink
from refimg import Refimg
from person import Refimg, Person, PersonRefimgLink
from flask_login import login_required, current_user
from job import Job, JobExtra, Joblog, NewJob

View File

@@ -23,8 +23,7 @@ from flask_login import login_required, current_user
################################################################################
from job import Job, JobExtra, Joblog, NewJob
from path import PathType, Path
from person import Person, PersonRefimgLink
from refimg import Refimg
from person import Refimg, Person, PersonRefimgLink
from settings import Settings
from shared import SymlinkName
from dups import Duplicates

View File

@@ -55,7 +55,6 @@ login_manager.login_view = "login" # default login route, failed wit
from settings import Settings
from files import Entry, GetJM_Message, ClearJM_Message
from person import Person
from refimg import Refimg
from job import Job, GetNumActiveJobs
from ai import aistats
from path import StoragePathNames

View File

@@ -5,7 +5,6 @@ from main import db, app, ma
from sqlalchemy import Sequence
from sqlalchemy.exc import SQLAlchemyError
from status import st, Status
from refimg import Refimg
from flask_login import login_required, current_user
from werkzeug import secure_filename
from shared import GenFace, GenThumb
@@ -18,6 +17,16 @@ import os
################################################################################
# Class describing Person 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)
face = db.Column(db.LargeBinary, unique=True, nullable=False)
thumbnail = db.Column(db.String, unique=True, nullable=False)
created_on = db.Column(db.Float)
def __repr__(self):
return "<id: {}, fname: {}>".format(self.id, self.fname )
class PersonRefimgLink(db.Model):
__tablename__ = "person_refimg_link"
person_id = db.Column(db.Integer, db.ForeignKey('person.id'), unique=True, nullable=False, primary_key=True)

120
refimg.py
View File

@@ -1,120 +0,0 @@
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
import os
from flask_login import login_required, current_user
# pylint: disable=no-member
################################################################################
# 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)
face = db.Column(db.LargeBinary, unique=True, nullable=False)
thumbnail = db.Column(db.String, unique=True, nullable=False)
created_on = db.Column(db.Float)
def __repr__(self):
return "<id: {}, fname: {}>".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 <form>, with field validation (via wtforms)
################################################################################
class RefimgForm(FlaskForm):
id = HiddenField()
fname = StringField('File name:', [validators.DataRequired()])
refimg_file = 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"])
@login_required
def refimgs():
refimgs = Refimg.query.all()
return render_template("refimgs.html", refimgs=refimgs)
################################################################################
# /refimg -> GET/POST -> creates a new refimg type and when created, takes you back to /refimgs
################################################################################
@app.route("/refimg", methods=["GET", "POST"])
@login_required
def new_refimg():
form = RefimgForm(request.form)
page_title='Create new Reference Image'
if request.method == 'GET':
return render_template("refimg.html", form=form, page_title=page_title )
else:
# now save into the DB
refimg = Refimg( fname=request.form["fname"] )
try:
# save the actual uploaded image to reference_images/
f=request.files['refimg_file']
f.save(os.path.join("reference_images", request.form["fname"]))
db.session.add(refimg)
db.session.commit()
st.SetMessage( "Created new Refimg ({})".format(refimg.fname) )
return redirect( '/refimgs' )
except SQLAlchemyError as e:
st.SetAlert( "danger" )
st.SetMessage( "<b>Failed to add Refimg:</b>&nbsp;{}".format(e.orig) )
except Exception as e:
st.SetAlert( "danger" )
st.SetMessage( "<b>Failed to modify Refimg:</b>&nbsp;{}".format(e) )
return render_template("refimg.html", form=form, page_title=page_title)
################################################################################
# /refimg/<id> -> GET/POST(save or delete) -> shows/edits/delets a single
# refimg
################################################################################
@app.route("/refimg/<id>", methods=["GET", "POST"])
@login_required
def refimg(id):
form = RefimgForm(request.form)
page_title='Edit Reference Image'
if request.method == 'POST':
try:
refimg = Refimg.query.get(id)
os.remove("reference_images/{}".format(refimg.fname) )
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) )
# save the actual uploaded image to reference_images/
f=request.files['refimg_file']
f.save(os.path.join("reference_images", request.form["fname"]))
db.session.commit()
return redirect( '/refimgs' )
except SQLAlchemyError as e:
st.SetAlert( "danger" )
st.SetMessage( "<b>Failed to modify Refimg:</b>&nbsp;{}".format(e.orig) )
except Exception as e:
st.SetAlert( "danger" )
st.SetMessage( "<b>Failed to modify Refimg:</b>&nbsp;{}".format(e) )
return render_template("refimg.html", form=form, page_title=page_title)
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)

View File

@@ -75,13 +75,6 @@
<a class="dropdown-item" href="{{url_for('persons')}}">Show People</a>
</div>
</div class="nav-item dropdown">
<div class="nav-item dropdown">
<a class="nav-item dropdown nav-link dropdown-toggle" href="#" id="RefMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Ref Image</a>
<div class="dropdown-menu" aria-labelledby="AIMenu">
<a class="dropdown-item" href="{{url_for('new_refimg')}}">Create Reference Image</a>
<a class="dropdown-item" href="{{url_for('refimgs')}}">View Reference Images</a>
</div>
</div class="nav-item dropdown">
<div class="nav-item dropdown">
<a class="nav-item dropdown nav-link dropdown-toggle" href="#" id="AIMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">AI</a>
<div class="dropdown-menu" aria-labelledby="AIMenu">