reimplement propose and unpropose with lock_for_update

This commit is contained in:
Laura Klünder 2017-07-04 20:11:26 +02:00
parent ef3f4a979d
commit b8be4a8105
3 changed files with 52 additions and 50 deletions

View file

@ -7,7 +7,6 @@ from django.core.exceptions import PermissionDenied
from django.http import Http404
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from c3nav.editor.forms import ChangeSetForm
@ -26,17 +25,14 @@ def changeset_detail(request, pk):
if not changeset.can_see(request):
raise Http404
can_edit = changeset.can_edit_changes(request)
can_edit = changeset.can_edit(request)
can_delete = changeset.can_delete(request)
if request.method == 'POST':
restore = request.POST.get('restore')
if restore and restore.isdigit():
if not can_edit:
raise PermissionDenied
try:
with changeset.lock_to_edit_changes(request):
with changeset.lock_to_edit(request):
try:
changed_object = changeset.changed_objects_set.get(pk=restore)
except:
@ -56,25 +52,22 @@ def changeset_detail(request, pk):
messages.info(request, _('You need to log in to propose changes.'))
return redirect(reverse('editor.login')+'?redirect='+request.path)
if changeset.can_propose(request):
changeset.proposed = timezone.now()
changeset.session_id = None
changeset.save()
messages.success(request, _('You proposed your changes.'))
else:
messages.error(request, _('You cannot propose this changeset.'))
with changeset.lock_to_edit() as changeset:
if changeset.can_propose(request):
changeset.propose(request.user)
messages.success(request, _('You proposed your changes.'))
else:
messages.error(request, _('You cannot propose this changeset.'))
return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))
elif request.POST.get('unpropose') == '1':
if changeset.can_unpropose(request):
changeset.proposed = None
changeset.assigned_to = None
changeset.session_id = None
changeset.save()
messages.success(request, _('You unproposed your changes.'))
else:
messages.error(request, _('You cannot unpropose this changeset.'))
with changeset.lock_to_edit() as changeset:
if changeset.can_unpropose(request):
changeset.unpropose(request.user)
messages.success(request, _('You unproposed your changes.'))
else:
messages.error(request, _('You cannot unpropose this changeset.'))
return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))

View file

@ -71,7 +71,7 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
Level = request.changeset.wrap_model('Level')
Space = request.changeset.wrap_model('Space')
can_edit = request.changeset.can_edit_changes(request)
can_edit = request.changeset.can_edit(request)
obj = None
if pk is not None:
@ -175,7 +175,7 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
# Delete this mapitem!
if request.POST.get('delete_confirm') == '1':
try:
with request.changeset.lock_to_edit_changes(request):
with request.changeset.lock_to_edit(request):
obj.delete()
except PermissionDenied:
messages.error(request, _('You can not edit changes on this changeset.'))
@ -212,7 +212,7 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
obj.on_top_of = on_top_of
try:
with request.changeset.lock_to_edit_changes(request):
with request.changeset.lock_to_edit(request):
obj.save()
if form.redirect_slugs is not None: