diff --git a/photos.py b/files.py similarity index 62% rename from photos.py rename to files.py index 0943b43..3937a7f 100644 --- a/photos.py +++ b/files.py @@ -23,6 +23,15 @@ from settings import Settings ################################################################################ # Utility Functions for Files ################################################################################ + +# Converts linux paths into windows paths +# HACK: assumes c:, might be best to just look for [a-z]: ? +def FixPath(p): + if p.startswith('c:'): + p = p.replace('/', '\\') + return p + +# Returns an md5 hash of the fnames' contents def md5(fname): hash_md5 = hashlib.md5() with open(fname, "rb") as f: @@ -62,46 +71,33 @@ def getExif(file): return fthumbnail -################################################################################ -# Class describing Photos in the database, and via sqlalchemy, connected to the DB as well -################################################################################ +class FileData(): + def __init__(self): + self.view_path='' + self.view_list=[] + self.symlink='' -# photos might not be the best name... more than just photos live in this class currently -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_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.LargeBinary, unique=False, nullable=True) - - def __repr__(self): - return "".format(self.id, self.name ) - -################################################################################ -# /photos -> show photos from import_path(s) -################################################################################ -@app.route("/photos", methods=["GET"]) -def photos(): +# +# HACK: At present this only handles one path (need to re-factor if we have +# multiple valid paths in import_path) +# +def GenerateFileData(): sets = Settings.query.filter(Settings.name=="import_path").all() paths= sets[0].value.split("#") file_list=[] view_list=[] - view_path="" + fdata = FileData() for p in paths: - if p.startswith('c:'): - p = p.replace('/', '\\') - if( os.path.exists( p ) ): - view_path = p + p = FixPath(p) if os.path.exists( p ): - if p.startswith('c:'): - symlink = 'static\\{}'.format( os.path.basename(p[0:-1])) - else: - symlink = 'static/{}'.format( os.path.basename(p[0:-1])) - if not os.path.exists(symlink): - os.symlink(p, symlink) - file_list.append(glob.glob(view_path + '**', recursive=True)) + fdata.view_path = p + # to serve static content of the images, we create a symlink + # from inside the static subdir of each import_path that exists + fdata.symlink = FixPath('static/{}'.format( os.path.basename(p[0:-1]))) + if not os.path.exists(fdata.symlink): + os.symlink(p, fdata.symlink) + + file_list.append(glob.glob(fdata.view_path + '**', recursive=True)) for file in file_list[0]: fthumbnail = None if file == p: @@ -123,13 +119,43 @@ def photos(): fsize = round(os.stat(file).st_size/(1024*1024)) fname=file.replace(p, "") -# tmp_photo=Photos( name=fname, type=ftype, size_mb=fsize, hash=fhash ) -# db.session.add(tmp_photo) - view_list.append( Photos( name=fname, type=ftype, size_mb=fsize, hash=fhash, thumbnail=fthumbnail )) + view_list.append( Files( name=fname, type=ftype, size_mb=fsize, hash=fhash, thumbnail=fthumbnail )) + fdata.view_list = view_list + return fdata -# db.session.commit() +################################################################################ +# Class describing Files in the database, and via sqlalchemy, connected to the DB as well +# This has to match one-for-one the DB table +################################################################################ +class Files(db.Model): + id = db.Column(db.Integer, db.Sequence('files_id_seq'), primary_key=True ) + name = db.Column(db.String, unique=True, nullable=False ) + type = db.Column(db.String, 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=True) + thumbnail = db.Column(db.LargeBinary, unique=False, nullable=True) + + def __repr__(self): + return "".format(self.id, self.name ) + + +################################################################################ +# /file_list -> show detailed file list of files from import_path(s) +################################################################################ +@app.route("/file_list", methods=["GET"]) +def file_list(): + file_data=GenerateFileData() + return render_template("file_list.html", page_title='View Files (details)', file_data=file_data, alert=st.GetAlert(), message=st.GetMessage() ) + +################################################################################ +# /files -> show thumbnail view of files from import_path(s) +################################################################################ +@app.route("/files", methods=["GET"]) +def files(): + file_data=GenerateFileData() + return render_template("files.html", page_title='View Files', file_data=file_data, alert=st.GetAlert(), message=st.GetMessage() ) - return render_template("photos.html", page_title='View Photos', view_path=view_path, file_list=view_list, symlink=symlink, alert=st.GetAlert(), message=st.GetMessage() ) @app.route("/static/") def custom_static(filename): diff --git a/main.py b/main.py index 8ec06c5..748240f 100644 --- a/main.py +++ b/main.py @@ -28,7 +28,7 @@ Bootstrap(app) ################################# Now, import non-book classes ################################### from settings import Settings -from photos import Photos +from files import Files ####################################### GLOBALS ####################################### # allow jinja2 to call these python functions directly diff --git a/templates/base.html b/templates/base.html index 6ba75fd..910e735 100644 --- a/templates/base.html +++ b/templates/base.html @@ -43,9 +43,9 @@