Use transaction.atomic instead of lock_table
lock_table used LOCK which is mysql-specific
This commit is contained in:
parent
f0f1585661
commit
3c8f1c58c5
2 changed files with 21 additions and 52 deletions
|
@ -12,15 +12,15 @@ from django.views.decorators.csrf import csrf_exempt
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
|
from django.db import transaction
|
||||||
|
|
||||||
from gestioncof.models import CofProfile
|
from gestioncof.models import CofProfile
|
||||||
from gestioncof.petits_cours_models import (
|
from gestioncof.petits_cours_models import (
|
||||||
PetitCoursDemande, PetitCoursAttribution, PetitCoursAttributionCounter,
|
PetitCoursDemande, PetitCoursAttribution, PetitCoursAttributionCounter,
|
||||||
PetitCoursAbility, PetitCoursSubject
|
PetitCoursAbility
|
||||||
)
|
)
|
||||||
from gestioncof.petits_cours_forms import DemandeForm, MatieresFormSet
|
from gestioncof.petits_cours_forms import DemandeForm, MatieresFormSet
|
||||||
from gestioncof.decorators import buro_required
|
from gestioncof.decorators import buro_required
|
||||||
from gestioncof.shared import lock_table, unlock_tables
|
|
||||||
|
|
||||||
|
|
||||||
class DemandeListView(ListView):
|
class DemandeListView(ListView):
|
||||||
|
@ -274,17 +274,17 @@ def _traitement_post(request, demande):
|
||||||
headers={'Reply-To': replyto}))
|
headers={'Reply-To': replyto}))
|
||||||
connection = mail.get_connection(fail_silently=False)
|
connection = mail.get_connection(fail_silently=False)
|
||||||
connection.send_messages(mails_to_send)
|
connection.send_messages(mails_to_send)
|
||||||
lock_table(PetitCoursAttributionCounter, PetitCoursAttribution, User)
|
with transaction.atomic():
|
||||||
for matiere in proposals:
|
for matiere in proposals:
|
||||||
for rank, user in enumerate(proposals[matiere]):
|
for rank, user in enumerate(proposals[matiere]):
|
||||||
counter = PetitCoursAttributionCounter.objects.get(user=user,
|
counter = PetitCoursAttributionCounter.objects.get(
|
||||||
matiere=matiere)
|
user=user, matiere=matiere
|
||||||
|
)
|
||||||
counter.count += 1
|
counter.count += 1
|
||||||
counter.save()
|
counter.save()
|
||||||
attrib = PetitCoursAttribution(user=user, matiere=matiere,
|
attrib = PetitCoursAttribution(user=user, matiere=matiere,
|
||||||
demande=demande, rank=rank + 1)
|
demande=demande, rank=rank + 1)
|
||||||
attrib.save()
|
attrib.save()
|
||||||
unlock_tables()
|
|
||||||
demande.traitee = True
|
demande.traitee = True
|
||||||
demande.traitee_par = request.user
|
demande.traitee_par = request.user
|
||||||
demande.processed = datetime.now()
|
demande.processed = datetime.now()
|
||||||
|
@ -309,8 +309,7 @@ def inscription(request):
|
||||||
profile.petits_cours_accept = "receive_proposals" in request.POST
|
profile.petits_cours_accept = "receive_proposals" in request.POST
|
||||||
profile.petits_cours_remarques = request.POST["remarques"]
|
profile.petits_cours_remarques = request.POST["remarques"]
|
||||||
profile.save()
|
profile.save()
|
||||||
lock_table(PetitCoursAttributionCounter, PetitCoursAbility, User,
|
with transaction.atomic():
|
||||||
PetitCoursSubject)
|
|
||||||
abilities = (
|
abilities = (
|
||||||
PetitCoursAbility.objects.filter(user=request.user).all()
|
PetitCoursAbility.objects.filter(user=request.user).all()
|
||||||
)
|
)
|
||||||
|
@ -319,7 +318,6 @@ def inscription(request):
|
||||||
ability.user,
|
ability.user,
|
||||||
ability.matiere
|
ability.matiere
|
||||||
)
|
)
|
||||||
unlock_tables()
|
|
||||||
success = True
|
success = True
|
||||||
formset = MatieresFormSet(instance=request.user)
|
formset = MatieresFormSet(instance=request.user)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1,15 +1,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from __future__ import division
|
|
||||||
from __future__ import print_function
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django_cas_ng.backends import CASBackend
|
from django_cas_ng.backends import CASBackend
|
||||||
from django_cas_ng.utils import get_cas_client
|
from django_cas_ng.utils import get_cas_client
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.db import connection
|
|
||||||
|
|
||||||
from gestioncof.models import CofProfile
|
from gestioncof.models import CofProfile
|
||||||
|
|
||||||
|
@ -74,25 +67,3 @@ def context_processor(request):
|
||||||
"site": Site.objects.get_current(),
|
"site": Site.objects.get_current(),
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def lock_table(*models):
|
|
||||||
query = "LOCK TABLES "
|
|
||||||
for i, model in enumerate(models):
|
|
||||||
table = model._meta.db_table
|
|
||||||
if i > 0:
|
|
||||||
query += ", "
|
|
||||||
query += "%s WRITE" % table
|
|
||||||
cursor = connection.cursor()
|
|
||||||
cursor.execute(query)
|
|
||||||
row = cursor.fetchone()
|
|
||||||
return row
|
|
||||||
|
|
||||||
|
|
||||||
def unlock_tables(*models):
|
|
||||||
cursor = connection.cursor()
|
|
||||||
cursor.execute("UNLOCK TABLES")
|
|
||||||
row = cursor.fetchone()
|
|
||||||
return row
|
|
||||||
|
|
||||||
unlock_table = unlock_tables
|
|
||||||
|
|
Loading…
Reference in a new issue