Exemple #1
0
    def _do_sort_queue_obj(self, qs, date_sort):
        """
        Column sorting logic based on request GET parameters.
        Deals with objects with joins on the Addon (e.g. RereviewQueue,
        Version). Returns qs of apps.
        """
        sort_type, order = clean_sort_param(self.request, date_sort=date_sort)
        sort_str = sort_type

        if sort_type not in [date_sort, 'name']:
            sort_str = 'addon__' + sort_type

        # sort_str includes possible joins when ordering.
        # sort_type is the name of the field to sort on without desc/asc
        # markers. order_by is the name of the field to sort on with desc/asc
        # markers.
        order_by = ('-' if order == 'desc' else '') + sort_str

        # Sort.
        if sort_type == 'name':
            # Sorting by name translation through an addon foreign key.
            return order_by_translation(
                Webapp.objects.filter(
                    id__in=qs.values_list('addon', flat=True)), order_by)

        # Convert sorted queue object queryset to sorted app queryset.
        sorted_app_ids = (qs.order_by('-addon__priority_review', order_by)
                            .values_list('addon', flat=True))
        qs = Webapp.objects.filter(id__in=sorted_app_ids)
        return manual_order(qs, sorted_app_ids, 'addons.id')
Exemple #2
0
    def _do_sort_queue_obj(self, qs, date_sort):
        """
        Column sorting logic based on request GET parameters.
        Deals with objects with joins on the Addon (e.g. RereviewQueue,
        Version). Returns qs of apps.
        """
        sort_type, order = clean_sort_param(self.request, date_sort=date_sort)
        sort_str = sort_type

        if sort_type not in [date_sort, 'name']:
            sort_str = 'addon__' + sort_type

        # sort_str includes possible joins when ordering.
        # sort_type is the name of the field to sort on without desc/asc
        # markers. order_by is the name of the field to sort on with desc/asc
        # markers.
        order_by = ('-' if order == 'desc' else '') + sort_str

        # Sort.
        if sort_type == 'name':
            # Sorting by name translation through an addon foreign key.
            return order_by_translation(
                Webapp.objects.filter(
                    id__in=qs.values_list('addon', flat=True)), order_by)

        # Convert sorted queue object queryset to sorted app queryset.
        sorted_app_ids = (qs.order_by('-addon__priority_review',
                                      order_by).values_list('addon',
                                                            flat=True))
        qs = Webapp.objects.filter(id__in=sorted_app_ids)
        return manual_order(qs, sorted_app_ids, 'addons.id')
Exemple #3
0
def test_ordering():
    """Given a specific set of primary keys, assure that we return addons
    in that order."""

    app1id = app_factory().id
    app2id = app_factory().id
    app3id = app_factory().id
    semi_arbitrary_order = [app2id, app3id, app1id]
    addons = manual_order(Webapp.objects.all(), semi_arbitrary_order)
    eq_(semi_arbitrary_order, [addon.id for addon in addons])
Exemple #4
0
def test_ordering():
    """Given a specific set of primary keys, assure that we return addons
    in that order."""

    app1id = app_factory().id
    app2id = app_factory().id
    app3id = app_factory().id
    semi_arbitrary_order = [app2id, app3id, app1id]
    addons = manual_order(Webapp.objects.all(), semi_arbitrary_order)
    eq_(semi_arbitrary_order, [addon.id for addon in addons])
Exemple #5
0
 def filter(self, field):
     qs = self.base_queryset
     if field == 'purchased':
         # Id's are in created order, so let's invert them for this query.
         # According to my testing we don't actually need to dedupe this.
         ids = list(reversed(self.ids[0])) + self.ids[1]
         return manual_order(qs.filter(id__in=ids), ids)
     elif field == 'price':
         return (qs.filter(id__in=self.uids)
                   .order_by('addonpremium__price__price', 'id'))
     elif field == 'name':
         return order_by_translation(qs.filter(id__in=self.uids), 'name')
Exemple #6
0
def purchase_list(request, user):
    # Return all apps that the user has a contribution for as well as all apps
    # they have installed.
    def get_ids(qs):
        return list(qs.order_by('-id').values_list('addon_id', flat=True))

    contributed_apps_ids = get_ids(user.contribution_set.filter(type__in=[
        mkt.CONTRIB_PURCHASE, mkt.CONTRIB_REFUND, mkt.CONTRIB_CHARGEBACK]))

    installed_apps_ids = get_ids(user.installed_set.filter(install_type__in=[
        apps.INSTALL_TYPE_USER, apps.INSTALL_TYPE_DEVELOPER]).exclude(
        addon__in=contributed_apps_ids))

    addon_ids = contributed_apps_ids + installed_apps_ids
    qs = Webapp.objects.filter(id__in=addon_ids)
    products = paginate(request, manual_order(qs, addon_ids), count=qs.count())
    return products
Exemple #7
0
def purchase_list(request, user):
    # Return all apps that the user has a contribution for as well as all apps
    # they have installed.
    def get_ids(qs):
        return list(qs.order_by('-id').values_list('addon_id', flat=True))

    contributed_apps_ids = get_ids(
        user.contribution_set.filter(type__in=[
            mkt.CONTRIB_PURCHASE, mkt.CONTRIB_REFUND, mkt.CONTRIB_CHARGEBACK
        ]))

    installed_apps_ids = get_ids(
        user.installed_set.filter(install_type__in=[
            apps.INSTALL_TYPE_USER, apps.INSTALL_TYPE_DEVELOPER
        ]).exclude(addon__in=contributed_apps_ids))

    addon_ids = contributed_apps_ids + installed_apps_ids
    qs = Webapp.objects.filter(id__in=addon_ids)
    products = paginate(request, manual_order(qs, addon_ids), count=qs.count())
    return products