0001-mdel_ddpacs-make-_handle_create-atomic-40011.patch
passerelle/apps/mdel_ddpacs/abstract.py | ||
---|---|---|
24 | 24 |
import xml.etree.ElementTree as ET |
25 | 25 |
import zipfile |
26 | 26 | |
27 |
from django.db import models, IntegrityError |
|
27 |
from django.db import models, IntegrityError, transaction
|
|
28 | 28 |
from django.core.urlresolvers import reverse |
29 | 29 |
from django.http import HttpResponse |
30 | 30 |
from django.utils.translation import ugettext_lazy as _ |
... | ... | |
129 | 129 | |
130 | 130 |
def _handle_create(self, request, payload): |
131 | 131 |
reference = 'A-' + payload['display_id'] |
132 |
try: |
|
133 |
demand = self.demand_set.create( |
|
134 |
reference=reference, |
|
135 |
step=1, |
|
136 |
data=payload) |
|
137 |
except IntegrityError as e: |
|
138 |
raise APIError('reference-non-unique', http_status=400, |
|
139 |
data={'original_exc': exception_to_text(e)}) |
|
140 |
self.add_job('push_demand', demand_id=demand.id) |
|
141 |
return self.status(request, demand) |
|
132 |
with transaction.atomic(): |
|
133 |
try: |
|
134 |
demand = self.demand_set.create( |
|
135 |
reference=reference, |
|
136 |
step=1, |
|
137 |
data=payload) |
|
138 |
except IntegrityError as e: |
|
139 |
raise APIError('reference-non-unique', http_status=400, |
|
140 |
data={'original_exc': exception_to_text(e)}) |
|
141 |
self.add_job('push_demand', demand_id=demand.id) |
|
142 |
return self.status(request, demand) |
|
142 | 143 | |
143 | 144 |
def push_demand(self, demand_id): |
144 | 145 |
demand = self.demand_set.get(id=demand_id) |
145 |
- |