From b2104e191b0fc28305f665565f484894d58f7fb2 Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Mon, 27 Oct 2025 21:34:53 +0200 Subject: [PATCH] refactored photoupload() --- core/views/uploads.py | 96 ++++++++++++++++++------------------------- 1 file changed, 41 insertions(+), 55 deletions(-) diff --git a/core/views/uploads.py b/core/views/uploads.py index 9adccf6..d6eb1e4 100644 --- a/core/views/uploads.py +++ b/core/views/uploads.py @@ -329,16 +329,29 @@ def photoupload(request, folder=None): folder_arg = "" # improve this later dirpath = Path(settings.PHOTOS_ROOT, 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}) - 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 def _post(ctx): - # keep original POST behavior and prints 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 // folder. formd = PhotographerForm(request.POST) ctx["formd"] = formd if formd.is_valid(): @@ -351,74 +364,47 @@ def photoupload(request, folder=None): return render(request, "errors/generic.html", {"message": message}) return ctx - # else branch: handle uploads / renames + # else form for uploads / renames form = FilesRenameForm(request.POST, request.FILES) 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") + 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"]) renameto = sanitize_name(request.POST.get("renameto", "")) ctx["actual_saved"] = [] ctx["filesaved"] = False - - # If multiple uploaded files - if multiple: - if len(multiple) == 1: - # single-file upload, possibly renamed - f = multiple[0] - filename_to_save = renameto if renameto != "" else f.name - try: + # multiple files, ignore renameto and save each + for f in multiple: + try: + if len(multiple) == 1: + filename_to_save = renameto if renameto != "" else f.name 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: + 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(): ctx["actual_saved"].append(saved_filename) ctx["filesaved"] = True - else: - # multiple files, ignore renameto and save each - for f in multiple: - try: - saved_filename = fs.save(f.name, content=f) - 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 + continue + if (ctx["dirpath"] / saved_filename).is_file(): + ctx["actual_saved"].append(saved_filename) + ctx["filesaved"] = True + print(ctx) return 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 # main flow