From 6807e44228a64f01c5d585b61514961a0b5c3561 Mon Sep 17 00:00:00 2001 From: Damien De Paoli Date: Sun, 10 Jan 2021 17:31:09 +1100 Subject: [PATCH] it now at least does a basic view page successfully, with name, size, hash --- photos.py | 39 +++++++++++++++++++++++++++++---------- templates/photos.html | 5 +++-- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/photos.py b/photos.py index 1129628..43e1661 100644 --- a/photos.py +++ b/photos.py @@ -6,16 +6,30 @@ from sqlalchemy import Sequence from sqlalchemy.exc import SQLAlchemyError from status import st, Status import os -from os import path import glob from PIL import Image from pymediainfo import MediaInfo +import hashlib +################################################################################ +# Local Class imports +################################################################################ from settings import Settings ################################################################################ -# Class describing Author in the database, and via sqlalchemy, connected to the DB as well +# Utility Functions for Files +################################################################################ +def md5(fname): + print("Trying to MD5 - {}".format(fname)) + hash_md5 = hashlib.md5() + with open(fname, "rb") as f: + for chunk in iter(lambda: f.read(4096), b""): + hash_md5.update(chunk) + return hash_md5.hexdigest() + +################################################################################ +# Class describing Photos in the database, and via sqlalchemy, connected to the DB as well ################################################################################ # photos might not be the best name... more than just photos live in this class currently @@ -23,9 +37,9 @@ class Photos(db.Model): id = db.Column(db.Integer, db.Sequence('photos_id_seq'), primary_key=True ) name = db.Column(db.String, unique=True, nullable=False ) type = db.Column(db.String, unique=False, nullable=False) - # size = db.Column(db.Integer, unique=False, nullable=False) + 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=False) + hash = db.Column(db.Integer, unique=True, nullable=True) def __repr__(self): return "".format(self.id, self.name ) @@ -38,11 +52,12 @@ def photos(): sets = Settings.query.filter(Settings.name=="import_path").all() paths= sets[0].value.split("#") file_list=[] + view_list=[] view_path="" for p in paths: if p.startswith('c:'): p = p.replace('/', '\\') - if( path.exists( p ) ): + if( os.path.exists( p ) ): view_path = p file_list.append(glob.glob(view_path + '**', recursive=True)) for file in file_list[0]: @@ -55,12 +70,16 @@ def photos(): else: ftype = 'File' -# fhash=... (file) -# fsize = ... (file) - file_list.append( Photos( name=file, type=ftype )) - return render_template("photos.html", page_title='View Photos', view_path=view_path, alert=st.GetAlert(), message=st.GetMessage() ) - return render_template("photos.html", page_title='View Photos', view_path=view_path, file_list=file_list, alert=st.GetAlert(), message=st.GetMessage() ) + if ftype != "Directory": + fhash=md5(file) + else: + fhash=None + fsize = round(os.stat(file).st_size/(1024*1024)) + view_list.append( Photos( name=file, type=ftype, size_MB=fsize, hash=fhash )) + + print(file_list) + return render_template("photos.html", page_title='View Photos', view_path=view_path, file_list=view_list, alert=st.GetAlert(), message=st.GetMessage() ) def isImage(file): diff --git a/templates/photos.html b/templates/photos.html index 58e01c7..6e1c99b 100644 --- a/templates/photos.html +++ b/templates/photos.html @@ -3,7 +3,7 @@

{{page_title}} -- {{view_path}}

- + {% for obj in file_list %} +  {{obj.name}} + {% endfor %}
NameSizeHash
NameSize (MB)Hash
{% if obj.type=="Directory" %} @@ -15,7 +15,8 @@ {% else %} {% endif %} -  {{obj.name}}{{obj.size}}{{obj.hash}}
{{obj.size_MB}}{{obj.hash}}