From e422ffb1bd277c92feda3ea30b4f7434be4be662 Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Sat, 16 May 2026 22:48:43 +0100 Subject: [PATCH] working --- core/models/survex.py | 4 +- core/views/new_hole.py | 87 ++++++++++++++----------------- templates/dataformat/entrance.xml | 2 +- 3 files changed, 41 insertions(+), 52 deletions(-) diff --git a/core/models/survex.py b/core/models/survex.py index 4c1d8d7e..9875e667 100644 --- a/core/models/survex.py +++ b/core/models/survex.py @@ -54,8 +54,8 @@ class SurvexStationLookUpManager(models.Manager): class SurvexStation(models.Model): name = models.CharField(max_length=100) - # block = models.ForeignKey("SurvexBlock", null=True, on_delete=models.SET_NULL) - # block not used since 2020. survex stations objects are only used for entrance locations and all taken from the .3d file + # survex stations objects are only used for entrance locations + # and *fix and all taken from the .3d file objects = SurvexStationLookUpManager() # overwrites SurvexStation.objects and enables lookup() x = models.FloatField(blank=True, null=True) y = models.FloatField(blank=True, null=True) diff --git a/core/views/new_hole.py b/core/views/new_hole.py index 71b26ea0..e208b387 100644 --- a/core/views/new_hole.py +++ b/core/views/new_hole.py @@ -469,7 +469,23 @@ def insert_before(insert, before, content_list): return content_list - +def clean_write_and_commit(filetuple, comment, editor): + filepath, content, _ = filetuple + print(filepath, comment) + try: + write_and_commit([filetuple], comment, editor) # note [list] + except PermissionError: + message = f"CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {filepath}. Ask a nerd to fix this." + return render(request, "errors/generic.html", {"message": message}) + except WriteAndCommitError as e: + message = f"CANNOT git on server for this file {filepath}.\n{e}\nEdits may not be committed.\nAsk a nerd to fix this." + return render(request, "errors/generic.html", {"message": e.message}) + except subprocess.SubprocessError as e: + message = f"CANNOT update server for this file {filepath}.\n{e}\nEdits may not be committed.\nAsk a nerd to fix this." + return render(request, "errors/generic.html", {"message": message}) + except: + raise + return def process_new_hole(form, area): """ @@ -500,6 +516,11 @@ def process_new_hole(form, area): writes: ⚡*fix 1623.g2025-bz-06 47.6964481 13.816103 0 # time & date of fix. we do not put "reference" in the *fix because we know it is used in the Entrance we are creating + + + NB "warning: Reentering an existing survey is deprecated" [since 2000] + and Olly says he would make this an error if it gets in the way of a new feature or whatever. + so we should produce two auto files, one in the 1623 folder and one in the 1626 folder """ @@ -511,13 +532,21 @@ def process_new_hole(form, area): _newfix(form, area, editor, cave_id, fix_id_basic) # ⚡ tidy this cave = _makecave(form, area) - _newent(form, area, editor, f"{area}.{fix_id}", cave) # yes, make the Entrance first + _newent(form, area, editor, fix_id, cave) _savecave(form, area, editor, cave) + # register the new GPS station in the database + # cf parsers/locations.py: LoadPositions() + # cf models/survex.py class SurvexStation + # (also needed after edit_entrance) + # SurvexStation objects are x/y/x in UTM and have a function to return lat/long which is a bit silly for many uses + # _new_location(fix_id) _newwallet(form, area, editor) return def _newfix(form, area, editor, cave_id, fix_id_basic): + """Constructs and does the edits to the auto GPS file in the loser repo + """ auto_gps_file, content_list = get_auto_file() fix_header = f"; {form.cleaned_data.get("discovery_date")} cave: {cave_id} wallet: {form.cleaned_data.get("survey_wallet")} \n" @@ -534,20 +563,9 @@ def _newfix(form, area, editor, cave_id, fix_id_basic): insert_before(insert, f"*end {area}", content_list) content = "".join(content_list) - file_as_list = [(auto_gps_file, content, "utf8")] - try: - write_and_commit(file_as_list, f"Online *fix {fix_id} ", editor) - except PermissionError: - message = f"CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {auto_gps_file}. Ask a nerd to fix this." - return render(request, "errors/generic.html", {"message": message}) - except WriteAndCommitError as e: - message = f"CANNOT git on server for this file {auto_gps_file}.\n{e}\nEdits may not be committed.\nAsk a nerd to fix this." - return render(request, "errors/generic.html", {"message": e.message}) - except subprocess.SubprocessError as e: - message = f"CANNOT update server for this file {auto_gps_file}.\n{e}\nEdits may not be committed.\nAsk a nerd to fix this." - return render(request, "errors/generic.html", {"message": message}) - except: - raise + filetuple = (auto_gps_file, content, "utf8") + comment = f"Online *fix {area}.{fix_id_basic} " + clean_write_and_commit(filetuple, comment, editor) return def _newent(form, areacode, editor, fix_id, cave): @@ -593,26 +611,12 @@ def _newent(form, areacode, editor, fix_id, cave): ce =CaveAndEntrance.objects.create( cave=cave, entranceletter="", entrance=ent ) - # # Add in saving Entrance to database and then .html file to filesystem and git # ent.save() # saves into db - try: - ent_file = ent.file_output() - write_and_commit([ent_file], f"Creating new Entrance {ent}", editor) - # leave other exceptions unhandled so that they bubble up to user interface - except PermissionError: - message = f"CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {ent.filename}. Ask a nerd to fix this." - return render(request, "errors/generic.html", {"message": message}) - except WriteAndCommitError as e: - message = f"CANNOT git on server for this file {ent.filename}.\n{e}\nEdits may not be committed.\nAsk a nerd to fix this." - return render(request, "errors/generic.html", {"message": e.message}) - except subprocess.SubprocessError as e: - message = f"CANNOT update server for this file {ent.filename}.\n{e}\nEdits may not be committed.\nAsk a nerd to fix this." - return render(request, "errors/generic.html", {"message": message}) - except: - raise + ent_file = ent.file_output() + clean_write_and_commit(ent_file, f"Creating new Entrance {ent}", editor) return def _guess_survex_file(areacode, id): @@ -661,23 +665,8 @@ def _makecave(form, areacode): def _savecave(form, areacode, editor, cave): cave.save() - - try: - cave_file = cave.file_output() - write_and_commit([cave_file], f"Creating new cave {cave}", editor) - # leave other exceptions unhandled so that they bubble up to user interface - except PermissionError: - message = f"CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {cave.filename}. Ask a nerd to fix this." - return render(request, "errors/generic.html", {"message": message}) - except WriteAndCommitError as e: - message = f"CANNOT git on server for this file {cave.filename}.\n{e}\nEdits may not be committed.\nAsk a nerd to fix this." - return render(request, "errors/generic.html", {"message": e.message}) - except subprocess.SubprocessError as e: - message = f"CANNOT update server for this file {cave.filename}.\n{e}\nEdits may not be committed.\nAsk a nerd to fix this." - return render(request, "errors/generic.html", {"message": message}) - except: - raise - + cave_file = cave.file_output() + clean_write_and_commit(cave_file, f"Creating new cave {cave}", editor) return def _newwallet(form, areacode, editor): diff --git a/templates/dataformat/entrance.xml b/templates/dataformat/entrance.xml index 68d04ba6..efbe0ecb 100644 --- a/templates/dataformat/entrance.xml +++ b/templates/dataformat/entrance.xml @@ -27,7 +27,7 @@ though, you do not need to do a data import as it happens automatically --> {{ entrance.lastvisit|default_if_none:""|safe }} {{ entrance.approach|default_if_none:""|safe }} {{ entrance.underground_description|default_if_none:""|safe }} -{{ entrance.photo|default_if_none:""|safe }} +{{ entrance.photo|safe }}