Projet

Général

Profil

0001-agendas-don-t-mix-db-operation-and-exception-handlin.patch

Paul Marillonnet, 07 juillet 2021 18:31

Télécharger (1,97 ko)

Voir les différences:

Subject: [PATCH] agendas: don't mix db operation and exception handling in
 atomic mode (#55393)

    undetermined behavior documented in django, see for instance:
    https://docs.djangoproject.com/fr/2.2/topics/db/
    transactions/#controlling-transactions-explicitly
 chrono/agendas/models.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
chrono/agendas/models.py
33 33
from django.contrib.postgres.fields import ArrayField, JSONField
34 34
from django.core.exceptions import FieldDoesNotExist, ValidationError
35 35
from django.core.validators import MaxValueValidator, MinValueValidator
36
from django.db import connection, models, transaction
36
from django.db import IntegrityError, connection, models, transaction
37 37
from django.db.models import Count, IntegerField, Max, OuterRef, Q, Subquery, Value
38 38
from django.db.models.functions import Coalesce
39 39
from django.template import Context, Template, TemplateSyntaxError, VariableDoesNotExist, engines
......
1570 1570
            raise ValueError('Multiple events found for specified datetime.')
1571 1571

  
1572 1572
        event = events[0]
1573
        with transaction.atomic():
1574
            try:
1575
                return Event.objects.get(agenda=self.agenda, slug=event.slug)
1576
            except Event.DoesNotExist:
1573
        try:
1574
            with transaction.atomic():
1577 1575
                event.save()
1578 1576
                return event
1577
        except IntegrityError:
1578
            return Event.objects.get(agenda=self.agenda, slug=event.slug)
1579 1579

  
1580 1580
    def get_recurrences(
1581 1581
        self, min_datetime, max_datetime, excluded_datetimes=None, exceptions=None, slug_separator='--'
1582
-