From 0e78db8f3f6f39d0161bb9004928cee70dab129c Mon Sep 17 00:00:00 2001 From: Mike Solomon Date: Tue, 26 Mar 2013 15:29:55 -0700 Subject: [PATCH 1/2] SELECT FOR UPDATE only latest PK instead of all PKs --- sendgrid/mixins.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sendgrid/mixins.py b/sendgrid/mixins.py index 895f3b2..9fd8597 100644 --- a/sendgrid/mixins.py +++ b/sendgrid/mixins.py @@ -25,14 +25,16 @@ def bulk_create_with_post_save(self,instances): ) return instancesCreated + @transaction.commit_on_success def bulk_create_with_manual_ids(self,instances): try: - start = self.select_for_update().all().order_by('-pk')[0].pk + 1 + start = self.select_for_update().latest(field_name='pk').pk + 1 except IndexError: start = 1 for i,instance in enumerate(instances): instance.pk = start + i + # this call will end the transaction, but that's okay return self.bulk_create_with_post_save(instances) def bulk_create_with_manual_ids_retry(self,instances,max_retries=5,retry_counter=0): From 1f28a96b6cb91b4161c1abfe4e943dc29e76f0f0 Mon Sep 17 00:00:00 2001 From: Mike Solomon Date: Tue, 26 Mar 2013 15:51:17 -0700 Subject: [PATCH 2/2] Fixed exception --- sendgrid/mixins.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sendgrid/mixins.py b/sendgrid/mixins.py index 9fd8597..b257ed2 100644 --- a/sendgrid/mixins.py +++ b/sendgrid/mixins.py @@ -1,6 +1,8 @@ from django.conf import settings from django.db import models, transaction, IntegrityError from django.utils import simplejson +from django.core.exceptions import ObjectDoesNotExist + from utils import add_unsubscribes from utils import delete_unsubscribes @@ -29,7 +31,7 @@ def bulk_create_with_post_save(self,instances): def bulk_create_with_manual_ids(self,instances): try: start = self.select_for_update().latest(field_name='pk').pk + 1 - except IndexError: + except ObjectDoesNotExist: start = 1 for i,instance in enumerate(instances): instance.pk = start + i