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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user