diff options
author | Martin Green <martin.speleo@gmail.com> | 2022-08-01 16:04:22 +0200 |
---|---|---|
committer | Martin Green <martin.speleo@gmail.com> | 2022-08-01 16:04:22 +0200 |
commit | f491264b9ecb9724be99419bbc5331f9ca492bac (patch) | |
tree | 640ad435b60253fdaa144c24a70f72297850a333 /core/views/caves.py | |
parent | fa6758b9a0d8229d919b917687b703980de0fb84 (diff) | |
download | troggle-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.py | 70 |
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): |