0001-agendas-don-t-mix-db-operation-and-exception-handlin.patch
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 |
- |