diff --git a/core/views/uploads.py b/core/views/uploads.py index 0027b03..9e4f26c 100644 --- a/core/views/uploads.py +++ b/core/views/uploads.py @@ -83,7 +83,7 @@ class GPXuploadForm(forms.Form): # not a model-form, just a form-form """not a git repo so we do not need an "editor" to assign blame to""" prospector = forms.CharField(strip=True) -class gpxfixForm(forms.Form): # not a model-form, just a form-form +class GPXfixForm(forms.Form): # not a model-form, just a form-form """not a git repo so we do not need an "editor" to assign blame to""" prospector = forms.CharField(strip=True) areacode = forms.CharField(strip=True) @@ -418,9 +418,9 @@ def gpxupload(request, folder=None): folder is the "path" """ def gpxvalid(name): - if Path(name).suffix.lower() in [".xml", ".gpx"]: - return True # dangerous, we should check the actual file binary signature - return False + # dangerous, we should check the actual file binary signature + return Path(name).suffix.lower() in [".xml", ".gpx"] + print(f"gpxupload() {folder=}") year = current_expo() @@ -451,7 +451,7 @@ def gpxupload(request, folder=None): urldir = f"/gpxupload/{year}" print(f"gpxupload() {folder=} {dirpath=} {urlfile=} {urldir=}") - form = FilesRenameForm() + formd = GPXuploadForm() print(f"gpxupload() {form=} {formd=} ") @@ -469,8 +469,8 @@ def gpxupload(request, folder=None): print(f"gpxupload() {newprospector=}") try: (yearpath / newprospector).mkdir(parents=True, exist_ok=True) - except: - message = f'\n !! Permissions failure ?! 0 attempting to mkdir "{(yearpath / newprospector)}"' + except Exception as e: + message = f'\n !! Permissions failure ?! 0 attempting to mkdir "{(yearpath / newprospector)}": {e}' print(message) raise return render(request, "errors/generic.html", {"message": message}) @@ -481,62 +481,31 @@ def gpxupload(request, folder=None): for i in request.FILES: print(" ",i) - form = FilesRenameForm(request.POST, request.FILES) - print(f"gpxupload() is the FilesRenameForm valid? {form=}") - for i in form: - print(" ",i) - - if not form.is_valid(): - print(f"gpxupload() Form is not valid {form=}") - else: + if True: print(f"gpxupload() about to look at request.FILES") f = request.FILES["uploadfiles"] multiple = request.FILES.getlist("uploadfiles") # NO CHECK that the files being uploaded are image files fs = FileSystemStorage(dirpath) - renameto = sanitize_name(request.POST["renameto"]) actual_saved = [] if multiple: - if len(multiple) == 1: - if renameto != "": - try: # crashes in Django os.chmod call if on WSL, but does save file! - saved_filename = fs.save(renameto, content=f) - except: - print( - f'\n !! Permissions failure ?! 1 attempting to save "{f.name}" in "{dirpath}" {renameto=}' - ) - if "saved_filename" in locals(): - if saved_filename.is_file(): - actual_saved.append(saved_filename) - filesaved = True - else: # multiple is the uploaded content + + for f in multiple: + if gpxvalid(f.name): try: # crashes in Django os.chmod call if on WSL, but does save file! saved_filename = fs.save(f.name, content=f) except: print( - f'\n !! Permissions failure ?! 2 attempting to save "{f.name}" in "{dirpath}" {renameto=}' + f'\n !! Permissions failure ?! 3 attempting to save "{f.name}" in "{dirpath}" {renameto=}' ) if "saved_filename" in locals(): if saved_filename.is_file(): actual_saved.append(saved_filename) filesaved = True - else: # multiple is a list of content - for f in multiple: - if gpxvalid(f.name): - try: # crashes in Django os.chmod call if on WSL, but does save file! - saved_filename = fs.save(f.name, content=f) - except: - print( - f'\n !! Permissions failure ?! 3 attempting to save "{f.name}" in "{dirpath}" {renameto=}' - ) - if "saved_filename" in locals(): - if saved_filename.is_file(): - actual_saved.append(saved_filename) - filesaved = True - else: - print(f"gpxupload(): not a GPX file {f.name=}") + else: + print(f"gpxupload(): not a GPX file {f.name=}") print(f"gpxupload() drop through") files = [] @@ -574,6 +543,11 @@ def gpxupload(request, folder=None): }, ) +def analyse_gpx(saved_filename, content): + """For an uploaded GPX file, analyse it to get a *fix number + """ + print(f"analyse_gpx(): {saved_filename} -- {content.name} length: {len(content)} bytes") + @login_required_if_public def gpxfix(request): """Upload a GPX file containing a single track which is actually a single static point: for averaging @@ -585,7 +559,7 @@ def gpxfix(request): return True # dangerous, we should check the actual file binary signature return False - year = current_expo() # read thsi from the GPX file + year = current_expo() # read this from the GPX file in future! filesaved = False actual_saved = [] @@ -601,27 +575,24 @@ def gpxfix(request): print(f"gpxfix() {folder=} {dirpath=} {urlfile=} {urldir=}") - form = FilesRenameForm() - formd = gpxfixForm() - print(f"gpxfix() {form=} {formd=} ") if request.method == "POST": + formd = GPXuploadForm(request.POST) print(f"gpxfix() method=POST") for i in request.POST: print(" ",i) - try: - (yearpath).mkdir(parents=True, exist_ok=True) - except: - message = f'\n !! Permissions failure ?! 0 attempting to mkdir "{(yearpath)}"' - print(message) - raise - return render(request, "errors/generic.html", {"message": message}) + try: + (yearpath).mkdir(parents=True, exist_ok=True) + except: + message = f'\n !! Permissions failure ?! 0 attempting to mkdir "{(yearpath)}"' + print(message) + raise + return render(request, "errors/generic.html", {"message": message}) if "prospector" in request.POST: print(f"gpxfix() {request.POST=}\n {request.POST['prospector']=}") - formd = gpxfixForm(request.POST) if formd.is_valid(): newprospector = sanitize_name(request.POST["prospector"]) print(f"gpxfix() {newprospector=}") @@ -631,66 +602,40 @@ def gpxfix(request): for i in request.FILES: print(" ",i) - form = FilesRenameForm(request.POST, request.FILES) - print(f"gpxfix() is the FilesRenameForm valid? {form=}") - for i in form: - print(" ",i) - - if not form.is_valid(): - print(f"gpxfix() Form is not valid {form=}") - else: - print(f"gpxfix() about to look at request.FILES") - f = request.FILES["uploadfiles"] - multiple = request.FILES.getlist("uploadfiles") - # NO CHECK that the files being uploaded are image files - fs = FileSystemStorage(dirpath) + + if not formd.is_valid(): + print(f"gpxfix() Form is not valid {formd=}") + else: + print(f"gpxfix() about to look at request.FILES") + #f = request.FILES["uploadfiles"] + multiple = request.FILES.getlist("uploadfiles") + fs = FileSystemStorage(dirpath) - renameto = sanitize_name(request.POST["renameto"]) - actual_saved = [] - if multiple: - if len(multiple) == 1: - if renameto != "": - try: # crashes in Django os.chmod call if on WSL, but does save file! - saved_filename = fs.save(renameto, content=f) - except: - print( - f'\n !! Permissions failure ?! 1 attempting to save "{f.name}" in "{dirpath}" {renameto=}' - ) - if "saved_filename" in locals(): - if saved_filename.is_file(): - actual_saved.append(saved_filename) - filesaved = True - else: # multiple is the uploaded content - try: # crashes in Django os.chmod call if on WSL, but does save file! - saved_filename = fs.save(f.name, content=f) - except: - print( - f'\n !! Permissions failure ?! 2 attempting to save "{f.name}" in "{dirpath}" {renameto=}' - ) - if "saved_filename" in locals(): - if saved_filename.is_file(): - actual_saved.append(saved_filename) - filesaved = True - else: # multiple is a list of content - for f in multiple: - if gpxvalid(f.name): - try: # crashes in Django os.chmod call if on WSL, but does save file! - saved_filename = fs.save(f.name, content=f) - except: - print( - f'\n !! Permissions failure ?! 3 attempting to save "{f.name}" in "{dirpath}" {renameto=}' - ) - if "saved_filename" in locals(): - if saved_filename.is_file(): - actual_saved.append(saved_filename) - filesaved = True - else: - print(f"gpxfix(): not a GPX file {f.name=}") + actual_saved = [] + location_data = [] + if multiple: + for f in multiple: + if gpxvalid(f.name): + try: # crashes in Django os.chmod call if on WSL, but does save file! + saved_filename = fs.save(f.name, content=f) + except: + print( + f'\n !! Permissions failure ?! on attempting to save "{f.name}" in "{dirpath}" {renameto=}' + ) + if "saved_filename" in locals(): + if saved_filename.is_file(): + actual_saved.append(saved_filename) + filesaved = True + location_data.append(analyse_gpx(saved_filename, f)) + else: + print(f"gpxfix(): not a GPX file {f.name=}") print(f"gpxfix() drop through") files = [] dirs = [] + formd = GPXfixForm() + print(f"gpxfix() {formd=} ") try: for f in dirpath.iterdir(): if f.is_dir(): @@ -712,7 +657,7 @@ def gpxfix(request): request, "gpxfixform.html", { - "form": form, + "form": formd, **context, "urlfile": urlfile, "urldir": urldir, diff --git a/templates/gpxfixform.html b/templates/gpxfixform.html index 63e0a9d..d0610cb 100644 --- a/templates/gpxfixform.html +++ b/templates/gpxfixform.html @@ -9,47 +9,40 @@

Upload GPX file for a *fix

-
+
{% csrf_token %}
-


- -
- - +
+ style="padding: 0.5em 25px; margin-left:20%;" + for="areacode" >area code for this station

+ pattern="[A-Za-z][\-A-Za-z0-9]*" + placeholder="p2049-BW-01" required />