2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2026-05-12 20:20:25 +01:00

1/3 done file saving

This commit is contained in:
2026-05-11 00:25:39 +01:00
parent d1c5f802ee
commit 672c84e426
2 changed files with 75 additions and 23 deletions
+74 -22
View File
@@ -1,11 +1,26 @@
import re
import subprocess
from django import forms
from django.core.exceptions import ValidationError
from django.utils.safestring import mark_safe
from django.conf import settings
from troggle.parsers.people import who_is_this
from core.position_utils import which_area # file-type import, not module type.
from troggle.core.utils import (
get_cookie_max_age,
WriteAndCommitError,
add_commit,
current_expo,
get_editor,
git_commit,
git_string,
sanitize_name,
is_identified_user,
write_and_commit,
)
from troggle.core.position_utils import which_area # file-type import, not module type.
class NewHoleForm(forms.Form):
"""The validation on this form is a bit of a beast, sorry.
@@ -289,10 +304,14 @@ class NewHoleForm(forms.Form):
# Return the whitespace-stripped version to be saved
return clean_text
from textwrap import dedent
from django.shortcuts import render, redirect
from django.contrib import messages
def new_hole(request):
identified_login = is_identified_user(request.user)
areatext = None
if request.method == 'POST':
form = NewHoleForm(request.POST, request.FILES)
@@ -313,38 +332,71 @@ def new_hole(request):
else:
form = NewHoleForm()
return render(request, 'new_hole.html', {'form': form, "areatext": areatext})
return render(request, 'new_hole.html', {'form': form,
"identified_login": identified_login,
"areatext": areatext})
def get_auto_file():
auto_gps_file = settings.SURVEX_DATA / "fixedpts/gps/auto.svx"
if not auto_gps_file.exists():
auto_gps_file.parent.mkdir(parents=True, exist_ok=True)
with open(auto_gps_file, "w") as auto:
auto.write("""; Auto-created GPS fixes from 2026 for new caves in BOTH 1623 and 1626
*begin
*cs out UTM33
*cs LONG-LAT
""")
return auto_gps_file
auto.write(dedent(""" ; Auto-created GPS fixes from 2026 for new caves in BOTH 1623 and 1626
*begin
*cs out UTM33
*cs LONG-LAT
*end
"""))
with open(auto_gps_file, "r") as auto:
old_content = auto.readlines()
content_list = [line for line in old_content if "*end" not in line]
content = "".join(content_list)
print(content)
return auto_gps_file, content
def process_new_hole(form, area):
"""
➜Detect if logged-in & set editor using the cookie system
Create a fixed point record by appending to :loser:/fixedpts/gps/auto.svx
Create a new Cave record with associated new Entrance record
Do a git commit (expoweb) of the new Cave and Entrance description files
Do a git commit (loser) of the new GPS position
(git commits use your logged-in identity in the "Who are you ?" field)
Update the database with this new information
Create a fixed point record by inserting into :loser:/fixedpts/gps/auto.svx
✅ Do a git commit (loser) of the new GPS position
➜Create a new Cave description file
➜Create an associated new Entrance description file
➜Do a git commit (expoweb) of the new Cave and Entrance description files
Update the database with this new Cave
➜Update the database with this new Entrance
writes:
*fix 1623.g2025-bz-06 47.6964481 13.816103 0
we do not put "reference" in the *fix because we know it is used in the Entrance we are creating
❌BUT we do put reference in now because we haven't written the Entrance bit of the code yet!
"""
auto_gps_file = get_auto_file()
fix_line = f"*fix {area}.g{form.cleaned_data.get("cave_id")} {form.cleaned_data.get("gps_lat")} {form.cleaned_data.get("gps_long")} 0.0"
auto_gps_file, content = get_auto_file()
fix_id = f"{area}.g{form.cleaned_data.get("cave_id").lower()}"
fix_line = f"*fix {fix_id} reference {form.cleaned_data.get("gps_lat")} {form.cleaned_data.get("gps_long")} 0\n"
print(fix_line)
with open(auto_gps_file, "w") as auto:
auto.write(fix_line)
auto.write(f"*entrance {area}.g{form.cleaned_data.get("cave_id")}")
content += f"\n; {form.cleaned_data.get("discovery_date")} wallet: {form.cleaned_data.get("survey_wallet")} \n"
content += fix_line
content += f"*entrance {fix_id}\n"
content +=f"\n*end\n"
editor = git_string(form.cleaned_data["who_are_you"])
files = [(auto_gps_file, content, "utf8")]
try:
write_and_commit(files, 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
return
+1 -1
View File
@@ -134,7 +134,7 @@
<p>
<ul>
<li>Calculate whether this new cave is in area 1623 or 1626
<li>Create a <span style="font-variant: small-caps;">fixed point</span> record by appending to :loser:/fixedpts/gps/auto.svx
<li>Create a <span style="font-variant: small-caps;">fixed point</span> record by inserting into :loser:/fixedpts/gps/auto.svx
<li>Create a new Cave record with associated new Entrance record
<li>Do a git commit (expoweb) of the new Cave and Entrance description files
<li>Do a git commit (loser) of the new GPS position<br />