From 31d45e80b670077d81f97de476e8f20cdcfd7cec Mon Sep 17 00:00:00 2001 From: Damien De Paoli Date: Tue, 19 Jan 2021 17:33:10 +1100 Subject: [PATCH] moved over to new ENTRY based data structures for loading from DB and viewing content --- files.py | 48 ++++++++++++++++++++++++++++++++++------ main.py | 2 +- templates/file_list.html | 24 ++++++++++++-------- templates/files.html | 12 +++++----- 4 files changed, 63 insertions(+), 23 deletions(-) diff --git a/files.py b/files.py index 2275034..8a7457b 100644 --- a/files.py +++ b/files.py @@ -26,18 +26,52 @@ from job import Job, Joblog, NewJob # 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 File(db.Model): +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 "".format(self.entry_id, 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=False, nullable=False ) + + def __repr__(self): + return "".format(self.eid, self.path_prefix) + +class Entry(db.Model): + __tablename__ = "entry" id = db.Column(db.Integer, db.Sequence('file_id_seq'), primary_key=True ) name = db.Column(db.String, unique=True, nullable=False ) - type = db.Column(db.String, unique=False, nullable=False) - path_prefix = db.Column(db.String, unique=False, nullable=False) + type_id = db.Column(db.Integer, db.ForeignKey("file_type.id")) + type = db.relationship("FileType") + dir_details = db.relationship( "Dir") + file_details = db.relationship( "New_File" ) + in_dir = db.relationship ("Dir", secondary="entry_dir_link" ) + + def __repr__(self): + return "".format(self.id, self.name, self.type, self.dir_details, self.file_details, self.in_dir) + +class New_File(db.Model): + __tablename__ = "new_file" + eid = db.Column(db.Integer, db.ForeignKey("entry.id"), primary_key=True ) size_mb = db.Column(db.Integer, unique=False, nullable=False) - # hash might not be unique, this could be the source of dupe problems hash = db.Column(db.Integer, unique=True, nullable=True) thumbnail = db.Column(db.String, unique=False, nullable=True) def __repr__(self): - return "".format(self.id, self.name ) + return "".format(self.eid, self.size_mb, self.hash ) + +class FileType(db.Model): + __tablename__ = "file_type" + id = db.Column(db.Integer, db.Sequence('file_type_id_seq'), primary_key=True ) + name = db.Column(db.String, unique=True, nullable=False ) + + def __repr__(self): + return "".format(self.id, self.name ) ################################################################################ @@ -45,14 +79,14 @@ class File(db.Model): ################################################################################ @app.route("/file_list", methods=["GET"]) def file_list(): - return render_template("file_list.html", page_title='View Files (details)', file_data=File.query.all()) + return render_template("file_list.html", page_title='View Files (details)', entry_data=Entry.query.all()) ################################################################################ # /files -> show thumbnail view of files from import_path(s) ################################################################################ @app.route("/files", methods=["GET"]) def files(): - return render_template("files.html", page_title='View Files', file_data=File.query.all()) + return render_template("files.html", page_title='View Files', entry_data=Entry.query.all()) ################################################################################ # /files/scannow -> allows us to force a check for new files diff --git a/main.py b/main.py index 68d3263..551b5a6 100644 --- a/main.py +++ b/main.py @@ -28,7 +28,7 @@ Bootstrap(app) ################################# Now, import non-book classes ################################### from settings import Settings -from files import File +from files import Entry from person import Person from refimg import Refimg from job import Job, GetNumActiveJobs diff --git a/templates/file_list.html b/templates/file_list.html index 0f197bf..344d082 100644 --- a/templates/file_list.html +++ b/templates/file_list.html @@ -4,25 +4,25 @@
- {% for obj in file_data %} + {% for obj in entry_data %} + + {% if obj.type.name != "Directory" %} + + {% else %} + + {% endif %} + {% endfor %}
NameSize (MB)Path PrefixHash
- {% if obj.type == "Directory" %} + {% if obj.type.name == "Directory" %}
{{obj.name}} {% else %}
{% endif %} -
{{obj.size_mb}}{{obj.path_prefix}}{{obj.hash}}
{{obj.file_details[0].size_mb}}{{obj.in_dir[0].path_prefix}}{{obj.file_details[0].hash}}
diff --git a/templates/files.html b/templates/files.html index 7ce8411..a5ae088 100644 --- a/templates/files.html +++ b/templates/files.html @@ -24,15 +24,15 @@
- {% for obj in file_data %} - {% if obj.type != "Directory" %} + {% for obj in entry_data %} + {% if obj.type.name != "Directory" %}
- {% if obj.type=="Image" %} - - {% elif obj.type == "Video" %} + {% if obj.type.name=="Image" %} + + {% elif obj.type.name == "Video" %}
- +