Browse Source

Correct transactional exception scoping

David Cramer 9 years ago
parent
commit
9d9ffe9c57

+ 4 - 4
bin/load-mocks

@@ -238,15 +238,15 @@ def main(num_events=1):
                     message='This is a an example PHP event with an extremely long and annoying title\nIt also happens to contain some newlines in it,\nthus making it even more annoying.',
                 )
 
-            with transaction.atomic():
-                try:
+            try:
+                with transaction.atomic():
                     GroupMeta.objects.create(
                         group=event1.group,
                         key='github:tid',
                         value='134',
                     )
-                except IntegrityError:
-                    pass
+            except IntegrityError:
+                pass
 
             UserReport.objects.create(
                 project=project,

+ 14 - 14
src/sentry/api/endpoints/project_releases.py

@@ -117,8 +117,8 @@ class ProjectReleasesEndpoint(ProjectEndpoint):
         if serializer.is_valid():
             result = serializer.object
 
-            with transaction.atomic():
-                try:
+            try:
+                with transaction.atomic():
                     release = Release.objects.create(
                         project=project,
                         version=result['version'],
@@ -128,18 +128,18 @@ class ProjectReleasesEndpoint(ProjectEndpoint):
                         date_started=result.get('dateStarted'),
                         date_released=result.get('dateReleased') or timezone.now(),
                     )
-                except IntegrityError:
-                    return Response({
-                        'detail': 'Release with version already exists'
-                    }, status=400)
-                else:
-                    Activity.objects.create(
-                        type=Activity.RELEASE,
-                        project=project,
-                        ident=result['version'],
-                        data={'version': result['version']},
-                        datetime=release.date_released,
-                    )
+            except IntegrityError:
+                return Response({
+                    'detail': 'Release with version already exists'
+                }, status=400)
+            else:
+                Activity.objects.create(
+                    type=Activity.RELEASE,
+                    project=project,
+                    ident=result['version'],
+                    data={'version': result['version']},
+                    datetime=release.date_released,
+                )
 
             return Response(serialize(release, request.user), status=201)
         return Response(serializer.errors, status=400)

+ 6 - 6
src/sentry/api/endpoints/project_searches.py

@@ -50,18 +50,18 @@ class ProjectSearchesEndpoint(ProjectEndpoint):
         if serializer.is_valid():
             result = serializer.object
 
-            with transaction.atomic():
-                try:
+            try:
+                with transaction.atomic():
                     search = SavedSearch.objects.create(
                         project=project,
                         name=result['name'],
                         query=result['query'],
                         is_default=result.get('isDefault', False),
                     )
-                except IntegrityError:
-                    return Response({
-                        'detail': 'Search with same name already exists.'
-                    }, status=400)
+            except IntegrityError:
+                return Response({
+                    'detail': 'Search with same name already exists.'
+                }, status=400)
 
                 if search.is_default:
                     SavedSearch.objects.filter(

+ 4 - 4
src/sentry/event_manager.py

@@ -550,11 +550,11 @@ class EventManager(object):
         )
         cached = default_cache.get(cache_key)
         if cached is None:
-            try:
-                with transaction.atomic(using=router.db_for_write(EventUser)):
+            with transaction.atomic(using=router.db_for_write(EventUser)):
+                try:
                     euser.save()
-            except IntegrityError:
-                pass
+                except IntegrityError:
+                    pass
             default_cache.set(cache_key, '', 3600)
 
         return euser

+ 12 - 12
src/sentry/models/user.py

@@ -95,23 +95,23 @@ class User(BaseModel, AbstractBaseUser):
         )
 
         for obj in OrganizationMember.objects.filter(user=from_user):
-            with transaction.atomic():
-                try:
+            try:
+                with transaction.atomic():
                     obj.update(user=to_user)
-                except IntegrityError:
-                    pass
+            except IntegrityError:
+                pass
         for obj in GroupBookmark.objects.filter(user=from_user):
-            with transaction.atomic():
-                try:
+            try:
+                with transaction.atomic():
                     obj.update(user=to_user)
-                except IntegrityError:
-                    pass
+            except IntegrityError:
+                pass
         for obj in UserOption.objects.filter(user=from_user):
-            with transaction.atomic():
-                try:
+            try:
+                with transaction.atomic():
                     obj.update(user=to_user)
-                except IntegrityError:
-                    pass
+            except IntegrityError:
+                pass
 
         Activity.objects.filter(
             user=from_user,

+ 7 - 7
src/sentry/web/forms/add_organization_member.py

@@ -20,14 +20,14 @@ class AddOrganizationMemberForm(forms.ModelForm):
         om = super(AddOrganizationMemberForm, self).save(commit=False)
         om.organization = organization
 
-        with transaction.atomic():
-            try:
+        try:
+            with transaction.atomic():
                 om.save()
-            except IntegrityError:
-                return OrganizationMember.objects.get(
-                    user=om.user,
-                    organization=organization,
-                ), False
+        except IntegrityError:
+            return OrganizationMember.objects.get(
+                user=om.user,
+                organization=organization,
+            ), False
 
         AuditLogEntry.objects.create(
             organization=organization,