Refactor directory_listing function

This commit is contained in:
hiro 2019-06-13 21:47:49 +02:00
parent 9805919fc7
commit 4d733c224a
3 changed files with 47 additions and 38 deletions

View File

@ -4,7 +4,7 @@ import tempfile
import mimetypes import mimetypes
from flask import Response, request, render_template, make_response from flask import Response, request, render_template, make_response
from .. import strings from .. import strings
class BaseModeWeb(object): class BaseModeWeb(object):
""" """
@ -46,36 +46,31 @@ class BaseModeWeb(object):
pass pass
def directory_listing(self, path, filenames, filesystem_path=None): def directory_listing(self, path='', filenames=[], filesystem_path=None):
# If filesystem_path is None, this is the root directory listing # If filesystem_path is None, this is the root directory listing
files = [] files = []
dirs = [] dirs = []
r = ''
for filename in filenames: if self.web.mode == 'website':
if filesystem_path: files, dirs = build_directory_listing(filenames)
this_filesystem_path = os.path.join(filesystem_path, filename)
else:
this_filesystem_path = self.files[filename]
is_dir = os.path.isdir(this_filesystem_path) r = make_response(render_template('listing.html',
path=path,
files=files,
dirs=dirs,
static_url_path=self.web.static_url_path))
if is_dir: elif self.web.mode == 'share':
dirs.append({ r = make_response(render_template(
'basename': filename 'send.html',
}) file_info=self.file_info,
else: filename=os.path.basename(self.download_filename),
size = os.path.getsize(this_filesystem_path) filesize=self.filesize,
size_human = self.common.human_readable_filesize(size) filesize_human=self.common.human_readable_filesize(self.download_filesize),
files.append({ is_zipped=self.is_zipped,
'basename': filename, static_url_path=self.web.static_url_path))
'size_human': size_human
})
r = make_response(render_template('listing.html',
path=path,
files=files,
dirs=dirs,
static_url_path=self.web.static_url_path))
return self.web.add_security_headers(r) return self.web.add_security_headers(r)

View File

@ -44,15 +44,8 @@ class ShareModeWeb(BaseModeWeb):
else: else:
self.filesize = self.download_filesize self.filesize = self.download_filesize
r = make_response(render_template( return self.directory_listing()
'send.html',
file_info=self.file_info,
filename=os.path.basename(self.download_filename),
filesize=self.filesize,
filesize_human=self.common.human_readable_filesize(self.download_filesize),
is_zipped=self.is_zipped,
static_url_path=self.web.static_url_path))
return self.web.add_security_headers(r)
@self.web.app.route("/download") @self.web.app.route("/download")
def download(): def download():

View File

@ -14,12 +14,9 @@ class WebsiteModeWeb(BaseModeWeb):
""" """
def init(self): def init(self):
self.common.log('WebsiteModeWeb', '__init__') self.common.log('WebsiteModeWeb', '__init__')
# Reset assets path
self.web.app.static_folder=self.common.get_resource_path('share/static')
self.define_routes() self.define_routes()
def define_routes(self): def define_routes(self):
""" """
The web app routes for sharing a website The web app routes for sharing a website
@ -56,6 +53,7 @@ class WebsiteModeWeb(BaseModeWeb):
# Render it # Render it
dirname = os.path.dirname(self.files[index_path]) dirname = os.path.dirname(self.files[index_path])
basename = os.path.basename(self.files[index_path]) basename = os.path.basename(self.files[index_path])
return send_from_directory(dirname, basename) return send_from_directory(dirname, basename)
else: else:
@ -80,6 +78,7 @@ class WebsiteModeWeb(BaseModeWeb):
return self.web.error404() return self.web.error404()
else: else:
# Special case loading / # Special case loading /
if path == '': if path == '':
index_path = 'index.html' index_path = 'index.html'
if index_path in self.files: if index_path in self.files:
@ -97,7 +96,29 @@ class WebsiteModeWeb(BaseModeWeb):
# If the path isn't found, throw a 404 # If the path isn't found, throw a 404
return self.web.error404() return self.web.error404()
def build_directory_listing(self, filenames):
for filename in filenames:
if filesystem_path:
this_filesystem_path = os.path.join(filesystem_path, filename)
else:
this_filesystem_path = self.files[filename]
is_dir = os.path.isdir(this_filesystem_path)
if is_dir:
dirs.append({
'basename': filename
})
else:
size = os.path.getsize(this_filesystem_path)
size_human = self.common.human_readable_filesize(size)
files.append({
'basename': filename,
'size_human': size_human
})
return files, dirs
def build_file_list(self, filenames): def build_file_list(self, filenames):
""" """
Build a data structure that describes the list of files that make up Build a data structure that describes the list of files that make up