Example #1
0
 def transformer(collections):
     if not collections:
         return
     author_ids = set(c.author_id for c in collections)
     authors = dict((u.id, u) for u in UserProfile.objects.filter(id__in=author_ids))
     for c in collections:
         c.author = authors.get(c.author_id)
     c_dict = dict((c.pk, c) for c in collections)
     sharing.attach_share_counts(CollectionShareCountTotal, "collection", c_dict)
Example #2
0
 def transformer(collections):
     if not collections:
         return
     author_ids = set(c.author_id for c in collections)
     authors = dict(
         (u.id, u) for u in UserProfile.objects.filter(id__in=author_ids))
     for c in collections:
         c.author = authors.get(c.author_id)
     c_dict = dict((c.pk, c) for c in collections)
     sharing.attach_share_counts(CollectionShareCountTotal, 'collection',
                                 c_dict)
Example #3
0
    def transformer(addons):
        if not addons:
            return

        addon_dict = dict((a.id, a) for a in addons)
        personas = [a for a in addons if a.type == amo.ADDON_PERSONA]
        addons = [a for a in addons if a.type != amo.ADDON_PERSONA]

        version_ids = filter(None, (a._current_version_id for a in addons))
        versions = list(Version.objects.filter(id__in=version_ids).order_by()
                        .transform(Version.transformer))
        for version in versions:
            addon = addon_dict[version.addon_id]
            addon._current_version = version
            version.addon = addon

        # Attach listed authors.
        q = (UserProfile.objects.no_cache()
             .filter(addons__in=addons, addonuser__listed=True)
             .extra(select={'addon_id': 'addons_users.addon_id',
                            'position': 'addons_users.position'}))
        q = sorted(q, key=lambda u: (u.addon_id, u.position))
        for addon_id, users in itertools.groupby(q, key=lambda u: u.addon_id):
            addon_dict[addon_id].listed_authors = list(users)

        for persona in Persona.objects.no_cache().filter(addon__in=personas):
            addon = addon_dict[persona.addon_id]
            addon.persona = persona
            addon.listed_authors = [PersonaAuthor(persona.display_username)]
            addon.weekly_downloads = persona.popularity

        # Personas need categories for the JSON dump.
        Category.transformer(personas)

        # Store creatured apps on the add-on.
        creatured = AddonCategory.creatured()
        for addon in addons:
            addon._creatured_apps = creatured.get(addon.id, [])

        # Attach sharing stats.
        sharing.attach_share_counts(AddonShareCountTotal, 'addon', addon_dict)