new version allows downloads from subfolders

This commit is contained in:
Ville Rantanen
2018-03-10 15:28:34 +02:00
parent 4b2280049b
commit 00008c9c7d
4 changed files with 108 additions and 56 deletions

View File

@@ -1,7 +1,10 @@
import os
from datetime import datetime
from flask import current_app as app
try:
from urllib.request import pathname2url
except ImportError:
from urllib import pathname2url
def file_date_human(num):
return datetime.fromtimestamp(
@@ -47,12 +50,50 @@ def get_or_none(key,d,none = None):
else:
return none
def is_path_safe(path):
if path.startswith("."):
return False
if "/." in path:
return False
return True
def iter_folder_files(path, recursive = True):
if recursive:
for dirpath, dirnames, filenames in os.walk(path, topdown = False):
relative_path = os.path.relpath(dirpath,path)
dirnames.sort()
if "/." in relative_path:
continue
if relative_path == ".":
relative_path = ""
for f in sorted(filenames):
if f.startswith("."):
continue
fp = os.path.join(relative_path, f)
yield fp
else:
for file in sorted(path):
fp = os.path.join(path,file)
if os.path.isdir(fp):
continue
if file.startswith("."):
continue
yield fp
def path2url(path):
return pathname2url(path)
def safe_name(s):
return safe_string(s, "-_")
def safe_path(s):
return safe_string(s, "-_/")
def safe_string(s, valid):
""" return a safe string, replace non alnum characters with _ . all characters in valid are considered valid. """
return "".join([c if c.isalnum() or c in valid else "_" for c in s])