summaryrefslogtreecommitdiffstats
path: root/core/views/caves.py
diff options
context:
space:
mode:
authorMartin Green <martin.speleo@gmail.com>2022-08-01 16:04:22 +0200
committerMartin Green <martin.speleo@gmail.com>2022-08-01 16:04:22 +0200
commitf491264b9ecb9724be99419bbc5331f9ca492bac (patch)
tree640ad435b60253fdaa144c24a70f72297850a333 /core/views/caves.py
parentfa6758b9a0d8229d919b917687b703980de0fb84 (diff)
downloadtroggle-f491264b9ecb9724be99419bbc5331f9ca492bac.tar.gz
troggle-f491264b9ecb9724be99419bbc5331f9ca492bac.tar.bz2
troggle-f491264b9ecb9724be99419bbc5331f9ca492bac.zip
Allow entrances to be edited with the correct parent url. Commit changes to caves when adding a new entrance. Order entrances alphabetically
Diffstat (limited to 'core/views/caves.py')
-rw-r--r--core/views/caves.py70
1 files changed, 33 insertions, 37 deletions
diff --git a/core/views/caves.py b/core/views/caves.py
index c98d28e..26ac87f 100644
--- a/core/views/caves.py
+++ b/core/views/caves.py
@@ -19,6 +19,7 @@ from troggle.core.views import expo
from troggle.core.models.troggle import Expedition, DataIssue
from troggle.core.models.caves import CaveSlug, Cave, CaveAndEntrance, QM, EntranceSlug, Entrance, Area, SurvexStation, GetCaveLookup
from troggle.core.forms import CaveForm, CaveAndEntranceFormSet, EntranceForm, EntranceLetterForm
+from troggle.core.utils import writetrogglefile, write_and_commit
from .auth import login_required_if_public
'''Manages the complex procedures to assemble a cave description out of the compnoents
@@ -187,7 +188,7 @@ def file3d(request, cave, cave_id):
# These if statements need refactoring more cleanly
if cave.survex_file:
#print(" - cave.survex_file '{}'".format(cave.survex_file))
- if threedpath.is_file():
+ if threedpath.Pathis_file():
#print(" - threedpath '{}'".format(threedpath))
# possible error here as several .svx files of same names in different directories will overwrite in /3d/
if survexpath.is_file():
@@ -342,7 +343,8 @@ def edit_cave(request, path = "", slug=None):
ceinst.cave = cave
ceinst.save()
try:
- cave.writeDataFile()
+ cave_file = cave.file_output()
+ write_and_commit([cave_file], "Online edit of %s" % cave)
# 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.'
@@ -375,27 +377,28 @@ def edit_entrance(request, path = "", caveslug=None, slug=None):
It does save the data into into the database directly, not by parsing the file.
'''
- message = ""
- if caveslug is not None:
- try:
- cave = Cave.objects.get(caveslug__slug = caveslug)
- except:
- return render(request,'errors/badslug.html', {'badslug': caveslug})
- else:
- cave = Cave()
- if slug is not None:
+
+ try:
+ cave = Cave.objects.get(caveslug__slug = caveslug)
+ except:
+ return render(request,'errors/badslug.html', {'badslug': caveslug})
+
+ if slug:
entrance = Entrance.objects.get(entranceslug__slug = slug)
+ caveAndEntrance = CaveAndEntrance.objects.get(entrance = entrance, cave = cave)
+ entlettereditable = False
else:
entrance = Entrance()
+ caveAndEntrance = CaveAndEntrance(cave = cave, entrance = entrance)
+ entlettereditable = True
+
if request.POST:
form = EntranceForm(request.POST, instance = entrance)
+ entletter = EntranceLetterForm(request.POST, instance = caveAndEntrance)
#versionControlForm = VersionControlCommentForm(request.POST)
- if slug is None:
- entletter = EntranceLetterForm(request.POST)
- else:
- entletter = None
- if form.is_valid() and (slug is not None or entletter.is_valid()):
+ if form.is_valid() and entletter.is_valid():
entrance = form.save(commit = False)
+ entrance_letter = entletter.save(commit = False)
if slug is None:
if entletter.cleaned_data["entrance_letter"]:
slugname = cave.slug() + entletter.cleaned_data["entrance_letter"]
@@ -407,36 +410,29 @@ def edit_entrance(request, path = "", caveslug=None, slug=None):
if slug is None:
es = EntranceSlug(entrance = entrance, slug = slugname, primary = True)
es.save()
- el = entletter.save(commit = False)
- el.cave = cave
- el.entrance = entrance
- el.save()
- try:
- entrance.writeDataFile()
- # 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 {entrance.filename}. Ask a nerd to fix this.'
- return render(request,'errors/generic.html', {'message': message})
- except subprocess.SubprocessError:
- message = f'CANNOT git on server for this file {entrance.filename}. Edits may not be committed.\nAsk a nerd to fix this.'
- return render(request,'errors/generic.html', {'message': message})
-
+ entrance_file = entrance.file_output()
+ cave_file = cave.file_output()
+ write_and_commit([entrance_file, cave_file], "Online edit of %s%s" % (cave, entletter))
+ entrance.save()
+ if slug is None:
+ entrance_letter.save()
return HttpResponseRedirect("/" + cave.url)
- else:
- message = f'! POST data is INVALID {cave}'
- print(message)
else:
form = EntranceForm(instance = entrance)
#versionControlForm = VersionControlCommentForm()
if slug is None:
- entletter = EntranceLetterForm(request.POST)
+ entletter = EntranceLetterForm()
else:
- entletter = None
+ entletter = caveAndEntrance.entrance_letter
+
return render(request,
'editentrance.html',
- {'form': form, 'cave': cave, 'message': message,
+ {'form': form,
+
+ 'cave': cave,
#'versionControlForm': versionControlForm,
- 'entletter': entletter
+ 'entletter': entletter,
+ 'entlettereditable': entlettereditable
})
def ent(request, cave_id, ent_letter):