Example #1
0
    def filter_apps_feed_element(self, request, feed_element):
        """
        Runs multiple filters for apps of feed elements.
        Each filter will return None if all of the apps becomes excluded.
        """
        # Don't filter device/regions if filtering == 0.
        filtering = request.QUERY_PARAMS.get('filtering', '1') != '0'

        if feed_element.get('apps') == []:
            # No empty collections.
            return

        if feed_element and filtering:
            # Device filtering.
            device = DEVICE_CHOICES_IDS.get(request.QUERY_PARAMS.get('device'))
            device = applications.REVERSE_DEVICE_LOOKUP.get(device)
            if device and device != applications.DEVICE_DESKTOP.api_name:
                # TODO: remove desktop clause when we want desktop filtering.
                # If dev not in request, then we don't filter.
                feed_element = self._filter(device, 'device_types',
                                            feed_element, check_member=True)

        if feed_element and filtering:
            # Region filtering.
            region = request.QUERY_PARAMS.get('region')
            if region and region in dict(mkt.regions.REGIONS_CHOICES_SLUG):
                # Turn list of region objects into list of slugs.
                feed_element = self._filter(region, 'regions',
                                            feed_element, check_member=True,
                                            map_field='slug')

        if feed_element:
            # Status public filtering.
            feed_element = self._filter(amo.STATUS_PUBLIC, 'status',
                                        feed_element)

        if feed_element and filtering:
            if (feed_element.get('apps') and
                feed_element['app_count'] < feed.MIN_APPS_COLLECTION):
                # Enforce minimum apps on collections.
                feed_element = None

        if feed_element:
            feed_element = self._filter(False, 'is_disabled', feed_element)

        if feed_element:
            feed_element = self._pop_filter_fields(feed_element)

        return feed_element
Example #2
0
 def clean_device(self):
     return DEVICE_CHOICES_IDS.get(self.cleaned_data.get('device'))