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)
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)
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)