Path in the DB is complete, still have hacks around displaying folders (hardcoded path name)
This commit is contained in:
52
files.py
52
files.py
@@ -33,21 +33,39 @@ from dups import Duplicates
|
||||
# Class describing File in the database, and via sqlalchemy, connected to the DB as well
|
||||
# This has to match one-for-one the DB table
|
||||
################################################################################
|
||||
class PathDirLink(db.Model):
|
||||
__tablename__ = "path_dir_link"
|
||||
path_id = db.Column(db.Integer, db.ForeignKey("path.id"), primary_key=True )
|
||||
dir_eid = db.Column(db.Integer, db.ForeignKey("dir.eid"), primary_key=True )
|
||||
|
||||
def __repr__(self):
|
||||
return f"<path_id: {self.path_id}, dir_eid: {self.dir_eid}>"
|
||||
|
||||
class Path(db.Model):
|
||||
__tablename__ = "path"
|
||||
id = db.Column(db.Integer, db.Sequence('path_id_seq'), primary_key=True )
|
||||
path_prefix = db.Column(db.String, unique=True, nullable=False )
|
||||
num_files = db.Column(db.Integer)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<id: {self.id}, path_prefix: {self.path_prefix}, num_files={self.num_files}>"
|
||||
|
||||
class EntryDirLink(db.Model):
|
||||
__tablename__ = "entry_dir_link"
|
||||
entry_id = db.Column(db.Integer, db.ForeignKey("entry.id"), primary_key=True )
|
||||
dir_eid = db.Column(db.Integer, db.ForeignKey("dir.eid"), primary_key=True )
|
||||
|
||||
def __repr__(self):
|
||||
return "<entry_id: {}, dir_eid: {}>".format(self.entry_id, self.dir_eid)
|
||||
return f"<entry_id: {self.entry_id}, dir_eid: {self.dir_eid}>"
|
||||
|
||||
class Dir(db.Model):
|
||||
__tablename__ = "dir"
|
||||
eid = db.Column(db.Integer, db.ForeignKey("entry.id"), primary_key=True )
|
||||
path_prefix = db.Column(db.String, unique=True, nullable=False )
|
||||
rel_path = db.Column(db.String, unique=True )
|
||||
in_path = db.relationship("Path", secondary="path_dir_link", uselist=False)
|
||||
|
||||
def __repr__(self):
|
||||
return "<eid: {}, path_prefix: {}>".format(self.eid, self.path_prefix)
|
||||
return f"<eid: {self.eid}, rel_path: {self.rel_path}, in_path: {self.in_path}>"
|
||||
|
||||
class Entry(db.Model):
|
||||
__tablename__ = "entry"
|
||||
@@ -136,7 +154,12 @@ def ViewingOptions( request ):
|
||||
offset=int(request.form['offset'])
|
||||
grouping=request.form['grouping']
|
||||
size = request.form['size']
|
||||
folders = request.form['folders']
|
||||
# seems html cant do boolean, but uses strings so convert
|
||||
if request.form['folders'] == "False":
|
||||
folders=False
|
||||
if request.form['folders'] == "True":
|
||||
folders=True
|
||||
|
||||
cwd = request.form['cwd']
|
||||
print( f"setting cwd basedon form: {cwd}" )
|
||||
if 'prev' in request.form:
|
||||
@@ -171,9 +194,9 @@ def files_ip():
|
||||
prefix = SymlinkName(path,path+'/')
|
||||
|
||||
if noo == "Oldest":
|
||||
entries+=Entry.query.join(File).join(EntryDirLink).join(Dir).filter(Dir.path_prefix.like(prefix+'%')).order_by(File.year,File.month,File.day,Entry.name).offset(offset).limit(how_many).all()
|
||||
entries+=Entry.query.join(File).join(EntryDirLink).join(Dir).join(PathDirLink).join(Path).filter(Path.path_prefix==prefix).order_by(File.year,File.month,File.day,Entry.name).offset(offset).limit(how_many).all()
|
||||
else:
|
||||
entries+=Entry.query.join(File).join(EntryDirLink).join(Dir).filter(Dir.path_prefix.like(prefix+'%')).order_by(File.year.desc(),File.month.desc(),File.day.desc(),Entry.name).offset(offset).limit(how_many).all()
|
||||
entries+=Entry.query.join(File).join(EntryDirLink).join(Dir).join(PathDirLink).join(Path).filter(Path.path_prefix==prefix).order_by(File.year.desc(),File.month.desc(),File.day.desc(),Entry.name).offset(offset).limit(how_many).all()
|
||||
|
||||
return render_template("files.html", page_title='View Files (Import Path)', entry_data=entries, noo=noo, grouping=grouping, how_many=how_many, offset=offset, size=size, folders=folders, cwd=cwd )
|
||||
|
||||
@@ -194,10 +217,11 @@ def files_sp():
|
||||
prefix = SymlinkName(path,path+'/')
|
||||
|
||||
if noo == "Oldest":
|
||||
entries+=Entry.query.join(File).join(EntryDirLink).join(Dir).filter(Dir.path_prefix.like(prefix+'%')).order_by(File.year,File.month,File.day,Entry.name).offset(offset).limit(how_many).all()
|
||||
entries+=Entry.query.join(Dir).join(EntryDirLink).filter(Dir.path_prefix.like(prefix+'%')).order_by(Entry.name).offset(offset).limit(how_many).all()
|
||||
entries+=Entry.query.join(File).join(EntryDirLink).join(Dir).join(PathDirLink).join(Path).filter(Path.path_prefix==prefix).order_by(File.year,File.month,File.day,Entry.name).offset(offset).limit(how_many).all()
|
||||
entries+=Entry.query.join(Dir).join(EntryDirLink).join(PathDirLink).join(Path).filter(Path.path_prefix==prefix).order_by(Entry.name).offset(offset).limit(how_many).all()
|
||||
else:
|
||||
entries+=Entry.query.join(File).join(EntryDirLink).join(Dir).filter(Dir.path_prefix.like(prefix+'%')).order_by(File.year.desc(),File.month.desc(),File.day.desc(),Entry.name).offset(offset).limit(how_many).all()
|
||||
entries+=Entry.query.join(File).join(EntryDirLink).join(Dir).join(PathDirLink).join(Path).filter(Path.path_prefix==prefix).order_by(File.year.desc(),File.month.desc(),File.day.desc(),Entry.name).offset(offset).limit(how_many).all()
|
||||
entries+=Entry.query.join(Dir).join(EntryDirLink).join(PathDirLink).join(Path).filter(Path.path_prefix==prefix).order_by(Entry.name).offset(offset).limit(how_many).all()
|
||||
|
||||
return render_template("files.html", page_title='View Files (Storage Path)', entry_data=entries, noo=noo, grouping=grouping, how_many=how_many, offset=offset, size=size, folders=folders, cwd=cwd )
|
||||
|
||||
@@ -209,12 +233,6 @@ def search():
|
||||
|
||||
noo, grouping, how_many, offset, size, folders, cwd = ViewingOptions( request )
|
||||
|
||||
# seems html cant do boolean, but uses strings so convert
|
||||
if folders == "False":
|
||||
folders=False
|
||||
if folders == "True":
|
||||
folders=True
|
||||
|
||||
print( f"folders={folders}, type={type(folders)}" )
|
||||
|
||||
file_data=Entry.query.join(File).filter(Entry.name.ilike(f"%{request.form['term']}%")).order_by(File.year.desc(),File.month.desc(),File.day.desc(),Entry.name).offset(offset).limit(how_many).all()
|
||||
@@ -326,9 +344,13 @@ def custom_static(filename):
|
||||
################################################################################
|
||||
@app.template_filter('TopLevelFolderOf')
|
||||
def _jinja2_filter_toplevelfolderof(path, cwd):
|
||||
print( f"TopLevelFolderOf( {path}, {cwd} -- dirname={os.path.dirname(path)}" )
|
||||
|
||||
if os.path.dirname(path) == cwd:
|
||||
print("---TopLevelFolderOf is true")
|
||||
return True
|
||||
else:
|
||||
print("---TopLevelFolderOf is false")
|
||||
return False
|
||||
|
||||
###############################################################################
|
||||
|
||||
Reference in New Issue
Block a user