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:
43
files.py
43
files.py
@@ -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
24
main.py
@@ -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')
|
||||||
|
|||||||
@@ -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 </label>
|
containing {{overall_dup_cnt}} files -- Showing </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 %}
|
||||||
|
|||||||
Reference in New Issue
Block a user