put installed in a transaction (bug 706554)

This commit is contained in:
Andy McKay 2011-11-30 14:32:48 -08:00
Родитель 85ad80a531
Коммит 7f81288318
5 изменённых файлов: 11 добавлений и 15 удалений

Просмотреть файл

@ -1110,16 +1110,6 @@ class Addon(amo.models.OnChangeMixin, amo.models.ModelBase):
return self.installed.filter(user=user).exists()
def get_or_create_install(self, user):
"""
Gets or creates the install receipt.
Ignoring get_or_create until #13906 is fixed.
"""
try:
return self.installed.get(user=user)
except ObjectDoesNotExist:
return self.installed.create(user=user)
@receiver(dbsignals.post_save, sender=Addon,
dispatch_uid='addons.update.name.table')

Просмотреть файл

@ -40,7 +40,7 @@ from sharing.views import share as share_redirect
from stats.models import Contribution
from translations.query import order_by_translation
from versions.models import Version
from webapps.models import Webapp
from webapps.models import Installed, Webapp
from .models import Addon, Persona, FrozenAddon
from .decorators import (addon_view_factory, can_be_purchased, has_purchased,
has_not_purchased)
@ -596,7 +596,8 @@ def purchase_thanks(request, addon):
'download': download}
if addon.is_webapp():
installed = addon.get_or_create_install(user=request.amo_user)
installed, c = Installed.objects.safe_get_or_create(addon=addon,
user=request.amo_user)
data['receipt'] = installed.receipt
return jingo.render(request, 'addons/paypal_thanks.html', data)

Просмотреть файл

@ -130,7 +130,9 @@ def create_addon_purchase(sender, instance, **kw):
data = {'addon': instance.addon, 'user': instance.user}
purchase, created = AddonPurchase.objects.safer_get_or_create(**data)
purchase.update(type=amo.CONTRIB_PURCHASE)
instance.addon.get_or_create_install(user=instance.user)
from webapps.models import Installed # Circular import.
Installed.objects.safer_get_or_create(user=instance.user,
addon=instance.addon)
elif instance.type in [amo.CONTRIB_REFUND, amo.CONTRIB_CHARGEBACK]:
purchases = AddonPurchase.objects.filter(addon=instance.addon,

Просмотреть файл

@ -167,7 +167,8 @@ class TestReceipt(amo.tests.TestCase):
def create_install(self, user, webapp):
webapp.update(type=amo.ADDON_WEBAPP,
manifest_url='http://somesite.com/')
return webapp.get_or_create_install(user)
return Installed.objects.safer_get_or_create(user=user,
addon=webapp)[0]
def test_get_or_create(self):
install = self.create_install(self.user, self.webapp)

Просмотреть файл

@ -10,6 +10,7 @@ from amo.helpers import loc
from amo.utils import paginate
from addons.decorators import addon_view
import addons.views
from webapps.models import Installed
import search.views
from addons.models import Category
@ -108,6 +109,7 @@ def share(request, app_slug):
@post_required
def record(request, addon):
if addon.is_webapp():
installed = addon.get_or_create_install(user=request.amo_user)
installed, c = Installed.objects.safer_get_or_create(addon=addon,
user=request.amo_user)
return {'addon': addon.pk,
'receipt': installed.receipt if installed else ''}