2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2025-12-19 05:17:12 +00:00

refactored photoupload()

This commit is contained in:
2025-10-27 21:34:53 +02:00
parent 3fb310ed97
commit b2104e191b

View File

@@ -330,15 +330,28 @@ def photoupload(request, folder=None):
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,46 +364,33 @@ 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():
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 return ctx
# original behaviour: support renameto and multiple files
f_single = request.FILES.get("uploadfiles")
multiple = request.FILES.getlist("uploadfiles")
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
# 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:
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:
if (ctx["dirpath"] / saved_filename).is_file():
ctx["actual_saved"].append(saved_filename)
ctx["filesaved"] = True
else:
# multiple files, ignore renameto and save each # multiple files, ignore renameto and save each
for f in multiple: for f in multiple:
try: try:
if len(multiple) == 1:
filename_to_save = renameto if renameto != "" else f.name
saved_filename = fs.save(filename_to_save, content=f)
else:
saved_filename = fs.save(f.name, content=f) saved_filename = fs.save(f.name, content=f)
except Exception: except Exception:
print(f'\n !! Permissions failure ?! 3 attempting to save "{f.name}" in "{ctx["dirpath"]}" {renameto=}') print(f'\n !! Permissions failure ?! attempting to save "{f.name}" in "{ctx["dirpath"]}" {renameto=}')
if "saved_filename" in locals(): 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)
@@ -399,26 +399,12 @@ def photoupload(request, folder=None):
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
print(ctx)
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