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 flask_wtf import FlaskForm
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.exc import SQLAlchemyError
from status import st, Status
@@ -89,6 +89,30 @@ class FileType(db.Model):
def __repr__(self):
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 ):
noo="Oldest"
grouping="None"
@@ -244,17 +268,13 @@ def fix_dups():
st.SetMessage(f"Err, no dups - should now clear the FE 'danger' message?")
return render_template("base.html")
# use import_path setting to remove the dup path prefix of static/basename(<import_path>)
# -- static isn't really seen, and the import path basename is always going to be the same
s=Settings.query.first()
if s.storage_path[-1] == '/':
prefix = os.path.basename(s.storage_path[0:-1])
else:
prefix = os.path.basename(s.storage_path)
prefix=f"static/{prefix}/"
jexes = JobExtra.query.join(Job).join(PA_JobManager_Message).filter(PA_JobManager_Message.id==request.form['fe_msg_id']).all()
path=[jex.value for jex in jexes if jex.name == "path"][0]
prefix = SymlinkName(path,path+'/')
pagesize=int([jex.value for jex in jexes if jex.name == "pagesize"][0])
dups={}
for row in rows:
AddDup( prefix, row, dups )
AddDup( prefix+'/', row, dups )
d1=""
d2=""
@@ -306,7 +326,7 @@ def fix_dups():
overall_dup_sets += dup_cnt
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"])
def rm_dups():
@@ -327,6 +347,7 @@ def rm_dups():
fe_msg_id=request.form['fe_msg_id']
# 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="pagesize", value=10 ) )
job=NewJob( "rmdups", 0, None, jex )
st.SetAlert("success")

24
main.py
View File

@@ -26,34 +26,12 @@ Bootstrap(app)
################################# Now, import non-book classes ###################################
from settings import Settings
from files import Entry
from files import Entry, GetJM_Message, ClearJM_Message
from person import Person
from refimg import Refimg
from job import Job, GetNumActiveJobs
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 #######################################
# allow jinja2 to call these python functions directly
app.jinja_env.add_extension('jinja2.ext.loopcontrols')

View File

@@ -10,12 +10,12 @@
<form class="d-flex justify-content-center form-inline">
<h5>
<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>
<select class="form form-control" name="page_size">
<select class="form form-control" name="pagesize">
{% for o in "5", "10", "20", "50" %}
<option
{% if o|int == page_size %}
{% if o|int == pagesize %}
selected
{% endif %}
>{{o}}</option>
@@ -53,12 +53,12 @@
{% endfor %}
</div class="col-lg-12">
{% set page.cnt = page.cnt + 1 %}
{% if page.cnt == page_size %}
{% if page.cnt == pagesize %}
{% break %}
{% endif %}
{% 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>
{% for dup in per_path_dups %}
<div class="col-lg-12 py-2">
@@ -73,7 +73,7 @@
</script>
</div>
{% set page.cnt = page.cnt + 1 %}
{% if page.cnt == page_size %}
{% if page.cnt == pagesize %}
{% break %}
{% endif %}
{% endfor %}