use pagesize not page_size, and pass it in based on job extras, also use path based on job extras, so we fix issue of fix_dups not knowing which path from settings was used (import or storage)

This commit is contained in:
2021-03-06 11:45:21 +11:00
parent f1ec7f9eb6
commit b9dea327d0
3 changed files with 39 additions and 40 deletions

View File

@@ -1,7 +1,7 @@
from wtforms import SubmitField, StringField, HiddenField, validators, Form from wtforms import SubmitField, StringField, HiddenField, validators, Form
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from flask import request, render_template, redirect, send_from_directory from flask import request, render_template, redirect, send_from_directory
from main import db, app, ma from main import db, app, ma
from sqlalchemy import Sequence from sqlalchemy import Sequence
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from status import st, Status from status import st, Status
@@ -89,6 +89,30 @@ class FileType(db.Model):
def __repr__(self): def __repr__(self):
return "<id: {}, name={}>".format(self.id, self.name ) return "<id: {}, name={}>".format(self.id, self.name )
class PA_JobManager_Message(db.Model):
__tablename__ = "pa_job_manager_fe_message"
id = db.Column(db.Integer, db.Sequence('pa_job_manager_fe_message_id_seq'), primary_key=True )
job_id = db.Column(db.Integer, db.ForeignKey('job.id') )
alert = db.Column(db.String)
message = db.Column(db.String)
def __repr__(self):
return "<id: {}, job_id: {}, alert: {}, message: {}".format(self.id, self.job_id, self.alert, self.message)
################################################################################
# Local utility functions
################################################################################
def GetJM_Message():
msg=PA_JobManager_Message.query.first()
return msg
def ClearJM_Message(id):
msg=PA_JobManager_Message.query.get(id)
PA_JobManager_Message.query.filter(PA_JobManager_Message.id==id).delete()
db.session.commit()
return
def ViewingOptions( request ): def ViewingOptions( request ):
noo="Oldest" noo="Oldest"
grouping="None" grouping="None"
@@ -244,17 +268,13 @@ def fix_dups():
st.SetMessage(f"Err, no dups - should now clear the FE 'danger' message?") st.SetMessage(f"Err, no dups - should now clear the FE 'danger' message?")
return render_template("base.html") return render_template("base.html")
# use import_path setting to remove the dup path prefix of static/basename(<import_path>) jexes = JobExtra.query.join(Job).join(PA_JobManager_Message).filter(PA_JobManager_Message.id==request.form['fe_msg_id']).all()
# -- static isn't really seen, and the import path basename is always going to be the same path=[jex.value for jex in jexes if jex.name == "path"][0]
s=Settings.query.first() prefix = SymlinkName(path,path+'/')
if s.storage_path[-1] == '/': pagesize=int([jex.value for jex in jexes if jex.name == "pagesize"][0])
prefix = os.path.basename(s.storage_path[0:-1])
else:
prefix = os.path.basename(s.storage_path)
prefix=f"static/{prefix}/"
dups={} dups={}
for row in rows: for row in rows:
AddDup( prefix, row, dups ) AddDup( prefix+'/', row, dups )
d1="" d1=""
d2="" d2=""
@@ -306,7 +326,7 @@ def fix_dups():
overall_dup_sets += dup_cnt overall_dup_sets += dup_cnt
per_path_dups.append({'count': dup_cnt, 'd1': d1, 'd2': d2, 'did1': did1, 'did2': did2, 'hashes' : hashes }) per_path_dups.append({'count': dup_cnt, 'd1': d1, 'd2': d2, 'did1': did1, 'did2': did2, 'hashes' : hashes })
return render_template("dups.html", per_file_dups=per_file_dups, per_path_dups=per_path_dups, fe_msg_id=request.form['fe_msg_id'], overall_dup_cnt=overall_dup_cnt, overall_dup_sets=overall_dup_sets, page_size=20 ) return render_template("dups.html", per_file_dups=per_file_dups, per_path_dups=per_path_dups, fe_msg_id=request.form['fe_msg_id'], overall_dup_cnt=overall_dup_cnt, overall_dup_sets=overall_dup_sets, pagesize=pagesize )
@app.route("/rm_dups", methods=["POST"]) @app.route("/rm_dups", methods=["POST"])
def rm_dups(): def rm_dups():
@@ -327,6 +347,7 @@ def rm_dups():
fe_msg_id=request.form['fe_msg_id'] fe_msg_id=request.form['fe_msg_id']
# allow backend to delete FE message once delete is being processed # allow backend to delete FE message once delete is being processed
jex.append( JobExtra( name="fe_msg_id", value=fe_msg_id ) ) jex.append( JobExtra( name="fe_msg_id", value=fe_msg_id ) )
jex.append( JobExtra( name="pagesize", value=10 ) )
job=NewJob( "rmdups", 0, None, jex ) job=NewJob( "rmdups", 0, None, jex )
st.SetAlert("success") st.SetAlert("success")

24
main.py
View File

@@ -26,34 +26,12 @@ Bootstrap(app)
################################# Now, import non-book classes ################################### ################################# Now, import non-book classes ###################################
from settings import Settings from settings import Settings
from files import Entry from files import Entry, GetJM_Message, ClearJM_Message
from person import Person from person import Person
from refimg import Refimg from refimg import Refimg
from job import Job, GetNumActiveJobs from job import Job, GetNumActiveJobs
from ai import * from ai import *
####################################### CLASSES / DB model #######################################
class PA_JobManager_Message(db.Model):
__tablename__ = "pa_job_manager_fe_message"
id = db.Column(db.Integer, db.Sequence('pa_job_manager_fe_message_id_seq'), primary_key=True )
job_id = db.Column(db.Integer, db.ForeignKey('job.id') )
alert = db.Column(db.String)
message = db.Column(db.String)
def __repr__(self):
return "<id: {}, job_id: {}, alert: {}, message: {}".format(self.id, self.job_id, self.alert, self.message)
def GetJM_Message():
msg=PA_JobManager_Message.query.first()
return msg
def ClearJM_Message(id):
msg=PA_JobManager_Message.query.get(id)
PA_JobManager_Message.query.filter(PA_JobManager_Message.id==id).delete()
db.session.commit()
return
####################################### GLOBALS ####################################### ####################################### GLOBALS #######################################
# allow jinja2 to call these python functions directly # allow jinja2 to call these python functions directly
app.jinja_env.add_extension('jinja2.ext.loopcontrols') app.jinja_env.add_extension('jinja2.ext.loopcontrols')

View File

@@ -10,12 +10,12 @@
<form class="d-flex justify-content-center form-inline"> <form class="d-flex justify-content-center form-inline">
<h5> <h5>
<div class="form-group"> <div class="form-group">
<label for="page_size">{{overall_dup_sets}} sets/dirs of files <label for="pagesize">{{overall_dup_sets}} sets/dirs of files
containing {{overall_dup_cnt}} files -- Showing&nbsp;</label> containing {{overall_dup_cnt}} files -- Showing&nbsp;</label>
<select class="form form-control" name="page_size"> <select class="form form-control" name="pagesize">
{% for o in "5", "10", "20", "50" %} {% for o in "5", "10", "20", "50" %}
<option <option
{% if o|int == page_size %} {% if o|int == pagesize %}
selected selected
{% endif %} {% endif %}
>{{o}}</option> >{{o}}</option>
@@ -53,12 +53,12 @@
{% endfor %} {% endfor %}
</div class="col-lg-12"> </div class="col-lg-12">
{% set page.cnt = page.cnt + 1 %} {% set page.cnt = page.cnt + 1 %}
{% if page.cnt == page_size %} {% if page.cnt == pagesize %}
{% break %} {% break %}
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% if page.cnt < page_size %} {% if page.cnt < pagesize %}
<h5 class="mt-3">Choose path to KEEP (same file names in 2 different directories):</h5> <h5 class="mt-3">Choose path to KEEP (same file names in 2 different directories):</h5>
{% for dup in per_path_dups %} {% for dup in per_path_dups %}
<div class="col-lg-12 py-2"> <div class="col-lg-12 py-2">
@@ -73,7 +73,7 @@
</script> </script>
</div> </div>
{% set page.cnt = page.cnt + 1 %} {% set page.cnt = page.cnt + 1 %}
{% if page.cnt == page_size %} {% if page.cnt == pagesize %}
{% break %} {% break %}
{% endif %} {% endif %}
{% endfor %} {% endfor %}