2
0
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:
2025-10-27 21:34:53 +02:00
parent 3fb310ed97
commit b2104e191b

View File

@@ -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