2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2025-12-18 08:17:28 +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
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 /<year>/ 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