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
def clean_device(self): return DEVICE_CHOICES_IDS.get(self.cleaned_data.get('device'))