mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2025-12-18 19:07:10 +00:00
refactored photoupload()
This commit is contained in:
@@ -329,16 +329,29 @@ def photoupload(request, folder=None):
|
|||||||
folder_arg = "" # improve this later
|
folder_arg = "" # improve this later
|
||||||
dirpath = Path(settings.PHOTOS_ROOT, year)
|
dirpath = Path(settings.PHOTOS_ROOT, year)
|
||||||
urlfile = f"/expofiles/photos/{year}"
|
urlfile = f"/expofiles/photos/{year}"
|
||||||
urldir = f"/photoupload/{year}"
|
urldir = f"/photoupload/{year}"
|
||||||
|
|
||||||
ctx.update({"folder": folder_arg, "dirpath": dirpath, "urlfile": urlfile, "urldir": urldir})
|
ctx.update({"folder": folder_arg, "dirpath": dirpath, "urlfile": urlfile, "urldir": urldir})
|
||||||
print(f"photoupload() _setup -> {folder_arg=} {dirpath=} {urlfile=} {urldir=}")
|
|
||||||
|
files = []
|
||||||
|
dirs = []
|
||||||
|
try:
|
||||||
|
for f in ctx["dirpath"].iterdir():
|
||||||
|
if f.is_dir():
|
||||||
|
dirs.append(f.name)
|
||||||
|
if f.is_file():
|
||||||
|
files.append(f.name)
|
||||||
|
except FileNotFoundError:
|
||||||
|
files.append("(no folder yet - would be created)")
|
||||||
|
ctx["files"] = sorted(files) if files else []
|
||||||
|
ctx["dirs"] = sorted(dirs) if dirs else []
|
||||||
|
|
||||||
|
print(f"photoupload() _setup ->\n {folder_arg=}\n {dirpath=}\n {urlfile=}\n {urldir=}")
|
||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
def _post(ctx):
|
def _post(ctx):
|
||||||
# keep original POST behavior and prints
|
|
||||||
if "photographer" in request.POST:
|
if "photographer" in request.POST:
|
||||||
# then we are creating a new folder
|
# then we are creating a new folder, not uploading files. This only happens
|
||||||
|
# if we are in the top level, in the /<year>/ folder.
|
||||||
formd = PhotographerForm(request.POST)
|
formd = PhotographerForm(request.POST)
|
||||||
ctx["formd"] = formd
|
ctx["formd"] = formd
|
||||||
if formd.is_valid():
|
if formd.is_valid():
|
||||||
@@ -351,74 +364,47 @@ def photoupload(request, folder=None):
|
|||||||
return render(request, "errors/generic.html", {"message": message})
|
return render(request, "errors/generic.html", {"message": message})
|
||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
# else branch: handle uploads / renames
|
# else form for uploads / renames
|
||||||
form = FilesRenameForm(request.POST, request.FILES)
|
form = FilesRenameForm(request.POST, request.FILES)
|
||||||
ctx["form"] = form
|
ctx["form"] = form
|
||||||
if not form.is_valid():
|
|
||||||
return ctx
|
|
||||||
|
|
||||||
# original behaviour: support renameto and multiple files
|
|
||||||
f_single = request.FILES.get("uploadfiles")
|
|
||||||
multiple = request.FILES.getlist("uploadfiles")
|
multiple = request.FILES.getlist("uploadfiles")
|
||||||
|
if not multiple:
|
||||||
|
# user supplied no files — attach a form error and return to show it
|
||||||
|
print(f"photoupload(): no files to upload {multiple}")
|
||||||
|
form.add_error("uploadfiles", "No files uploaded.") # does not seem to be visible on form?
|
||||||
|
ctx["form"] = form
|
||||||
|
return ctx
|
||||||
|
|
||||||
fs = FileSystemStorage(ctx["dirpath"])
|
fs = FileSystemStorage(ctx["dirpath"])
|
||||||
|
|
||||||
renameto = sanitize_name(request.POST.get("renameto", ""))
|
renameto = sanitize_name(request.POST.get("renameto", ""))
|
||||||
ctx["actual_saved"] = []
|
ctx["actual_saved"] = []
|
||||||
ctx["filesaved"] = False
|
ctx["filesaved"] = False
|
||||||
|
# multiple files, ignore renameto and save each
|
||||||
# If multiple uploaded files
|
for f in multiple:
|
||||||
if multiple:
|
try:
|
||||||
if len(multiple) == 1:
|
if len(multiple) == 1:
|
||||||
# single-file upload, possibly renamed
|
filename_to_save = renameto if renameto != "" else f.name
|
||||||
f = multiple[0]
|
|
||||||
filename_to_save = renameto if renameto != "" else f.name
|
|
||||||
try:
|
|
||||||
saved_filename = fs.save(filename_to_save, content=f)
|
saved_filename = fs.save(filename_to_save, content=f)
|
||||||
except Exception:
|
|
||||||
print(f'\n !! Permissions failure ?! 1 attempting to save "{f.name}" in "{ctx["dirpath"]}" {renameto=}')
|
|
||||||
if "saved_filename" in locals():
|
|
||||||
if (ctx["dirpath"] / saved_filename).is_file():
|
|
||||||
ctx["actual_saved"].append(saved_filename)
|
|
||||||
ctx["filesaved"] = True
|
|
||||||
else:
|
else:
|
||||||
|
saved_filename = fs.save(f.name, content=f)
|
||||||
|
except Exception:
|
||||||
|
print(f'\n !! Permissions failure ?! attempting to save "{f.name}" in "{ctx["dirpath"]}" {renameto=}')
|
||||||
|
if "saved_filename" in locals():
|
||||||
if (ctx["dirpath"] / saved_filename).is_file():
|
if (ctx["dirpath"] / saved_filename).is_file():
|
||||||
ctx["actual_saved"].append(saved_filename)
|
ctx["actual_saved"].append(saved_filename)
|
||||||
ctx["filesaved"] = True
|
ctx["filesaved"] = True
|
||||||
else:
|
continue
|
||||||
# multiple files, ignore renameto and save each
|
if (ctx["dirpath"] / saved_filename).is_file():
|
||||||
for f in multiple:
|
ctx["actual_saved"].append(saved_filename)
|
||||||
try:
|
ctx["filesaved"] = True
|
||||||
saved_filename = fs.save(f.name, content=f)
|
print(ctx)
|
||||||
except Exception:
|
|
||||||
print(f'\n !! Permissions failure ?! 3 attempting to save "{f.name}" in "{ctx["dirpath"]}" {renameto=}')
|
|
||||||
if "saved_filename" in locals():
|
|
||||||
if (ctx["dirpath"] / saved_filename).is_file():
|
|
||||||
ctx["actual_saved"].append(saved_filename)
|
|
||||||
ctx["filesaved"] = True
|
|
||||||
continue
|
|
||||||
if (ctx["dirpath"] / saved_filename).is_file():
|
|
||||||
ctx["actual_saved"].append(saved_filename)
|
|
||||||
ctx["filesaved"] = True
|
|
||||||
|
|
||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
def _get(ctx):
|
def _get(ctx):
|
||||||
files = []
|
|
||||||
dirs = []
|
|
||||||
try:
|
|
||||||
for f in ctx["dirpath"].iterdir():
|
|
||||||
if f.is_dir():
|
|
||||||
dirs.append(f.name)
|
|
||||||
if f.is_file():
|
|
||||||
files.append(f.name)
|
|
||||||
except FileNotFoundError:
|
|
||||||
files.append("(no folder yet - would be created)")
|
|
||||||
if len(files) > 0:
|
|
||||||
files = sorted(files)
|
|
||||||
if dirs:
|
|
||||||
dirs = sorted(dirs)
|
|
||||||
ctx["files"] = files
|
|
||||||
ctx["dirs"] = dirs
|
|
||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
# main flow
|
# main flow
|
||||||
|
|||||||
Reference in New Issue
Block a user