Revert "use addonuser for personas (bug 734531)"
This reverts commit fd3ad4b1a5
.
This commit is contained in:
Родитель
34444536a2
Коммит
d4caef58b2
|
@ -38,7 +38,7 @@ from stats.models import AddonShareCountTotal
|
||||||
from translations.fields import (TranslatedField, PurifiedField,
|
from translations.fields import (TranslatedField, PurifiedField,
|
||||||
LinkifiedField, Translation)
|
LinkifiedField, Translation)
|
||||||
from translations.query import order_by_translation
|
from translations.query import order_by_translation
|
||||||
from users.models import UserProfile, UserForeignKey
|
from users.models import UserProfile, PersonaAuthor, UserForeignKey
|
||||||
from users.utils import find_users
|
from users.utils import find_users
|
||||||
from versions.compare import version_int, version_re
|
from versions.compare import version_int, version_re
|
||||||
from versions.models import Version
|
from versions.models import Version
|
||||||
|
@ -725,6 +725,7 @@ class Addon(amo.models.OnChangeMixin, amo.models.ModelBase):
|
||||||
for persona in Persona.objects.no_cache().filter(addon__in=personas):
|
for persona in Persona.objects.no_cache().filter(addon__in=personas):
|
||||||
addon = addon_dict[persona.addon_id]
|
addon = addon_dict[persona.addon_id]
|
||||||
addon.persona = persona
|
addon.persona = persona
|
||||||
|
addon.listed_authors = [PersonaAuthor(persona.display_username)]
|
||||||
addon.weekly_downloads = persona.popularity
|
addon.weekly_downloads = persona.popularity
|
||||||
# TODO: This shouldn't be necessary when we import theme users.
|
# TODO: This shouldn't be necessary when we import theme users.
|
||||||
author = UserProfile(display_name=persona.display_username)
|
author = UserProfile(display_name=persona.display_username)
|
||||||
|
@ -783,20 +784,14 @@ class Addon(amo.models.OnChangeMixin, amo.models.ModelBase):
|
||||||
def icon_url(self):
|
def icon_url(self):
|
||||||
return self.get_icon_url(32)
|
return self.get_icon_url(32)
|
||||||
|
|
||||||
def authors_other_addons(self, app=None):
|
@property
|
||||||
|
def authors_other_addons(self):
|
||||||
"""
|
"""
|
||||||
Return other addons by the author(s) of this addon,
|
Return other addons by the author(s) of this addon
|
||||||
optionally takes an app.
|
|
||||||
"""
|
"""
|
||||||
if app:
|
return (Addon.objects.valid().exclude(id=self.id)
|
||||||
qs = Addon.objects.listed(app)
|
.filter(addonuser__listed=True,
|
||||||
else:
|
authors__in=self.listed_authors).distinct())
|
||||||
qs = Addon.objects.valid()
|
|
||||||
return (qs.exclude(id=self.id)
|
|
||||||
.exclude(type=amo.ADDON_WEBAPP)
|
|
||||||
.filter(addonuser__listed=True,
|
|
||||||
authors__in=self.listed_authors)
|
|
||||||
.distinct())
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def contribution_url(self, lang=settings.LANGUAGE_CODE,
|
def contribution_url(self, lang=settings.LANGUAGE_CODE,
|
||||||
|
@ -1390,14 +1385,6 @@ class Persona(caching.CachingMixin, models.Model):
|
||||||
'updateURL': self.update_url,
|
'updateURL': self.update_url,
|
||||||
}, separators=(',', ':'), cls=JSONEncoder)
|
}, separators=(',', ':'), cls=JSONEncoder)
|
||||||
|
|
||||||
def authors_other_addons(self, app=None):
|
|
||||||
return (Addon.objects.listed(app)
|
|
||||||
.exclude(id=self.id)
|
|
||||||
.filter(addonuser__listed=True,
|
|
||||||
authors__in=self.addon.listed_authors,
|
|
||||||
type=amo.ADDON_PERSONA)
|
|
||||||
.distinct())
|
|
||||||
|
|
||||||
|
|
||||||
class AddonCategory(caching.CachingMixin, models.Model):
|
class AddonCategory(caching.CachingMixin, models.Model):
|
||||||
addon = models.ForeignKey(Addon)
|
addon = models.ForeignKey(Addon)
|
||||||
|
|
|
@ -1543,20 +1543,11 @@ class TestImpalaDetailPage(amo.tests.TestCase):
|
||||||
amo.tests.check_links(expected, links)
|
amo.tests.check_links(expected, links)
|
||||||
|
|
||||||
|
|
||||||
class TestPersonas(object):
|
class TestPersonaDetailPage(amo.tests.TestCase):
|
||||||
|
|
||||||
def create_addon_user(self, addon, user=None):
|
|
||||||
if user is None:
|
|
||||||
user = UserProfile.objects.get(pk=999)
|
|
||||||
AddonUser.objects.create(addon=addon, user=user)
|
|
||||||
|
|
||||||
|
|
||||||
class TestPersonaDetailPage(TestPersonas, amo.tests.TestCase):
|
|
||||||
fixtures = ['addons/persona', 'base/users']
|
fixtures = ['addons/persona', 'base/users']
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.addon = Addon.objects.get(id=15663)
|
self.addon = Addon.objects.get(id=15663)
|
||||||
self.create_addon_user(self.addon)
|
|
||||||
self.persona = self.addon.persona
|
self.persona = self.addon.persona
|
||||||
self.url = self.addon.get_url_path()
|
self.url = self.addon.get_url_path()
|
||||||
|
|
||||||
|
@ -1571,19 +1562,15 @@ class TestPersonaDetailPage(TestPersonas, amo.tests.TestCase):
|
||||||
|
|
||||||
def test_more_personas(self):
|
def test_more_personas(self):
|
||||||
other = addon_factory(type=amo.ADDON_PERSONA)
|
other = addon_factory(type=amo.ADDON_PERSONA)
|
||||||
self.create_addon_user(other)
|
other.persona.author = self.persona.author
|
||||||
|
other.persona.save()
|
||||||
r = self.client.get(self.url)
|
r = self.client.get(self.url)
|
||||||
eq_(pq(r.content)('#more-artist .more-link').length, 1)
|
eq_(pq(r.content)('#more-artist .more-link').length, 1)
|
||||||
|
|
||||||
def test_more_personas_no_addon(self):
|
|
||||||
other = addon_factory(type=amo.ADDON_EXTENSION)
|
|
||||||
self.create_addon_user(other)
|
|
||||||
r = self.client.get(self.url)
|
|
||||||
eq_(pq(r.content)('#more-artist .more-link').length, 0)
|
|
||||||
|
|
||||||
def test_new_more_personas(self):
|
def test_new_more_personas(self):
|
||||||
other = addon_factory(type=amo.ADDON_PERSONA)
|
other = addon_factory(type=amo.ADDON_PERSONA)
|
||||||
self.create_addon_user(other)
|
other.persona.author = self.persona.author
|
||||||
|
other.persona.save()
|
||||||
self.persona.persona_id = 0
|
self.persona.persona_id = 0
|
||||||
self.persona.save()
|
self.persona.save()
|
||||||
r = self.client.get(self.url)
|
r = self.client.get(self.url)
|
||||||
|
@ -1596,7 +1583,9 @@ class TestPersonaDetailPage(TestPersonas, amo.tests.TestCase):
|
||||||
addon_factory(type=amo.ADDON_PERSONA, disabled_by_user=True)
|
addon_factory(type=amo.ADDON_PERSONA, disabled_by_user=True)
|
||||||
|
|
||||||
other = addon_factory(type=amo.ADDON_PERSONA)
|
other = addon_factory(type=amo.ADDON_PERSONA)
|
||||||
self.create_addon_user(other)
|
other.persona.author = self.persona.author
|
||||||
|
other.persona.save()
|
||||||
|
eq_(other.persona.author, self.persona.author)
|
||||||
eq_(other.status, amo.STATUS_PUBLIC)
|
eq_(other.status, amo.STATUS_PUBLIC)
|
||||||
eq_(other.disabled_by_user, False)
|
eq_(other.disabled_by_user, False)
|
||||||
|
|
||||||
|
@ -1971,15 +1960,14 @@ class TestMobileHome(TestMobile):
|
||||||
self._test_addons()
|
self._test_addons()
|
||||||
|
|
||||||
|
|
||||||
class TestMobileDetails(TestPersonas, TestMobile):
|
class TestMobileDetails(TestMobile):
|
||||||
fixtures = TestMobile.fixtures + ['base/featured', 'base/users']
|
fixtures = TestMobile.fixtures + ['base/featured']
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestMobileDetails, self).setUp()
|
super(TestMobileDetails, self).setUp()
|
||||||
self.ext = Addon.objects.get(id=3615)
|
self.ext = Addon.objects.get(id=3615)
|
||||||
self.url = reverse('addons.detail', args=[self.ext.slug])
|
self.url = reverse('addons.detail', args=[self.ext.slug])
|
||||||
self.persona = Addon.objects.get(id=15679)
|
self.persona = Addon.objects.get(id=15679)
|
||||||
self.create_addon_user(self.persona)
|
|
||||||
self.persona_url = self.persona.get_url_path()
|
self.persona_url = self.persona.get_url_path()
|
||||||
|
|
||||||
def test_extension(self):
|
def test_extension(self):
|
||||||
|
@ -1997,13 +1985,15 @@ class TestMobileDetails(TestPersonas, TestMobile):
|
||||||
|
|
||||||
def test_more_personas(self):
|
def test_more_personas(self):
|
||||||
other = addon_factory(type=amo.ADDON_PERSONA)
|
other = addon_factory(type=amo.ADDON_PERSONA)
|
||||||
self.create_addon_user(other)
|
other.persona.author = self.persona.persona.author
|
||||||
|
other.persona.save()
|
||||||
r = self.client.get(self.persona_url, follow=True)
|
r = self.client.get(self.persona_url, follow=True)
|
||||||
eq_(pq(r.content)('#more-artist .more-link').length, 1)
|
eq_(pq(r.content)('#more-artist .more-link').length, 1)
|
||||||
|
|
||||||
def test_new_more_personas(self):
|
def test_new_more_personas(self):
|
||||||
other = addon_factory(type=amo.ADDON_PERSONA)
|
other = addon_factory(type=amo.ADDON_PERSONA)
|
||||||
self.create_addon_user(other)
|
other.persona.author = self.persona.persona.author
|
||||||
|
other.persona.save()
|
||||||
self.persona.persona.persona_id = 0
|
self.persona.persona.persona_id = 0
|
||||||
self.persona.persona.save()
|
self.persona.persona.save()
|
||||||
r = self.client.get(self.persona_url, follow=True)
|
r = self.client.get(self.persona_url, follow=True)
|
||||||
|
|
|
@ -46,7 +46,7 @@ from versions.models import Version
|
||||||
from .models import Addon, Persona, FrozenAddon
|
from .models import Addon, Persona, FrozenAddon
|
||||||
from .decorators import (addon_view_factory, can_be_purchased, has_purchased,
|
from .decorators import (addon_view_factory, can_be_purchased, has_purchased,
|
||||||
has_not_purchased)
|
has_not_purchased)
|
||||||
from mkt.webapps.models import Installed
|
from mkt.webapps.models import Webapp, Installed
|
||||||
|
|
||||||
log = commonware.log.getLogger('z.addons')
|
log = commonware.log.getLogger('z.addons')
|
||||||
paypal_log = commonware.log.getLogger('z.paypal')
|
paypal_log = commonware.log.getLogger('z.paypal')
|
||||||
|
@ -145,7 +145,15 @@ def extension_detail(request, addon):
|
||||||
# does a lot more queries we don't want on the initial page load.
|
# does a lot more queries we don't want on the initial page load.
|
||||||
if request.is_ajax():
|
if request.is_ajax():
|
||||||
# Other add-ons/apps from the same author(s).
|
# Other add-ons/apps from the same author(s).
|
||||||
ctx['author_addons'] = addon.authors_other_addons(app=request.APP)[:6]
|
if addon.is_webapp():
|
||||||
|
others = Webapp.objects.listed().filter(type=amo.ADDON_WEBAPP)
|
||||||
|
else:
|
||||||
|
others = (Addon.objects.listed(request.APP)
|
||||||
|
.exclude(type=amo.ADDON_WEBAPP))
|
||||||
|
others = (others.exclude(id=addon.id).distinct()
|
||||||
|
.filter(addonuser__listed=True,
|
||||||
|
authors__in=addon.listed_authors))
|
||||||
|
ctx['author_addons'] = others[:6]
|
||||||
return jingo.render(request, 'addons/impala/details-more.html', ctx)
|
return jingo.render(request, 'addons/impala/details-more.html', ctx)
|
||||||
else:
|
else:
|
||||||
if addon.is_webapp():
|
if addon.is_webapp():
|
||||||
|
@ -181,11 +189,17 @@ def persona_detail(request, addon, template=None):
|
||||||
else:
|
else:
|
||||||
category_personas = None
|
category_personas = None
|
||||||
|
|
||||||
|
# other personas from the same author(s)
|
||||||
|
author_personas = Addon.objects.public().filter(
|
||||||
|
persona__author=persona.author,
|
||||||
|
type=amo.ADDON_PERSONA).exclude(
|
||||||
|
pk=addon.pk).select_related('persona')[:3]
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'addon': addon,
|
'addon': addon,
|
||||||
'persona': persona,
|
'persona': persona,
|
||||||
'categories': categories,
|
'categories': categories,
|
||||||
'author_personas': persona.authors_other_addons(request.APP)[:3],
|
'author_personas': author_personas,
|
||||||
'category_personas': category_personas,
|
'category_personas': category_personas,
|
||||||
}
|
}
|
||||||
if not persona.is_new():
|
if not persona.is_new():
|
||||||
|
|
|
@ -516,6 +516,22 @@ class BlacklistedEmailDomain(amo.models.ModelBase):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
class PersonaAuthor(unicode):
|
||||||
|
"""Stub user until the persona authors get imported."""
|
||||||
|
|
||||||
|
@property
|
||||||
|
def id(self):
|
||||||
|
"""I don't want to change code depending on PersonaAuthor.id, so I'm
|
||||||
|
just hardcoding 0. The only code using this is flush_urls."""
|
||||||
|
return 0
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
display_name = name
|
||||||
|
|
||||||
|
|
||||||
class BlacklistedPassword(amo.models.ModelBase):
|
class BlacklistedPassword(amo.models.ModelBase):
|
||||||
"""Blacklisted passwords"""
|
"""Blacklisted passwords"""
|
||||||
password = models.CharField(max_length=255, unique=True, blank=False)
|
password = models.CharField(max_length=255, unique=True, blank=False)
|
||||||
|
|
|
@ -186,14 +186,6 @@ class Webapp(Addon):
|
||||||
"""When the submission process is done, update status accordingly."""
|
"""When the submission process is done, update status accordingly."""
|
||||||
self.update(status=amo.WEBAPPS_UNREVIEWED_STATUS)
|
self.update(status=amo.WEBAPPS_UNREVIEWED_STATUS)
|
||||||
|
|
||||||
def authors_other_addons(self, app=None):
|
|
||||||
"""Return other apps by the same author."""
|
|
||||||
return (self.__class__.objects.listed()
|
|
||||||
.filter(type=amo.ADDON_WEBAPP)
|
|
||||||
.exclude(id=self.id).distinct()
|
|
||||||
.filter(addonuser__listed=True,
|
|
||||||
authors__in=self.listed_authors))
|
|
||||||
|
|
||||||
|
|
||||||
# Pull all translated_fields from Addon over to Webapp.
|
# Pull all translated_fields from Addon over to Webapp.
|
||||||
Webapp._meta.translated_fields = Addon._meta.translated_fields
|
Webapp._meta.translated_fields = Addon._meta.translated_fields
|
||||||
|
|
Загрузка…
Ссылка в новой задаче