def apply_filters(self, request, applicable_filters): activity_list = super(ActivityResource, self).apply_filters(request, applicable_filters).prefetch_related('title_set').prefetch_related('description_set') query = request.GET.get('query', None) filter_year_param = request.GET.get('start_year_planned__in', None) if query: search_fields = comma_separated_parameter_to_list(request.GET.get('search_fields', None)) activity_list = activity_list.search(query, search_fields) if filter_year_param: years = comma_separated_parameter_to_list(filter_year_param) activity_list = activity_list.filter_years(years) return activity_list.distinct_if_necessary(applicable_filters)
def full_dehydrate(self, bundle, for_list=False): #If the select_fields param is found, run this overwritten method. #Otherwise run the default Tastypie method select_fields_param = bundle.request.GET.get('select_fields', None) if select_fields_param: select_fields = comma_separated_parameter_to_list(select_fields_param) for field_name, field_object in self.fields.items(): #If the field_name is in the list of requested fields dehydrate it if (field_name) in select_fields: # A touch leaky but it makes URI resolution work. if getattr(field_object, 'dehydrated_type', None) == 'related': field_object.api_name = self._meta.api_name field_object.resource_name = self._meta.resource_name bundle.data[field_name] = field_object.dehydrate(bundle, for_list=for_list) # Check for an optional method to do further dehydration. method = getattr(self, "dehydrate_%s" % field_name, None) if method: bundle.data[field_name] = method(bundle) bundle = self.dehydrate(bundle) return bundle else: return super(ActivityResource, self).full_dehydrate(bundle, for_list)
def full_dehydrate(self, bundle, for_list=False): #If the select_fields param is found, run this overwritten method. #Otherwise run the default Tastypie method select_fields_param = bundle.request.GET.get('select_fields', None) if select_fields_param: select_fields = comma_separated_parameter_to_list( select_fields_param) for field_name, field_object in self.fields.items(): #If the field_name is in the list of requested fields dehydrate it if (field_name) in select_fields: # A touch leaky but it makes URI resolution work. if getattr(field_object, 'dehydrated_type', None) == 'related': field_object.api_name = self._meta.api_name field_object.resource_name = self._meta.resource_name bundle.data[field_name] = field_object.dehydrate( bundle, for_list=for_list) # Check for an optional method to do further dehydration. method = getattr(self, "dehydrate_%s" % field_name, None) if method: bundle.data[field_name] = method(bundle) bundle = self.dehydrate(bundle) return bundle else: return super(ActivityResource, self).full_dehydrate(bundle, for_list)
def apply_filters(self, request, applicable_filters): activity_list = super(ActivityResource, self).apply_filters( request, applicable_filters).prefetch_related( 'title_set').prefetch_related('description_set') query = request.GET.get('query', None) filter_year_param = request.GET.get('start_year_planned__in', None) if query: search_fields = comma_separated_parameter_to_list( request.GET.get('search_fields', None)) activity_list = activity_list.search(query, search_fields) if filter_year_param: years = comma_separated_parameter_to_list(filter_year_param) activity_list = activity_list.filter_years(years) return activity_list.distinct_if_necessary(applicable_filters)
def alter_list_data_to_serialize(self, request, data): select_fields_param = request.GET.get('select_fields', None) if select_fields_param: select_fields = comma_separated_parameter_to_list( select_fields_param) data['meta']['selectable_fields'] = { f[0] for f in self.fields.items() } - {f for f in select_fields} return data
def alter_list_data_to_serialize(self, request, data): select_fields_param = request.GET.get('select_fields', None) if select_fields_param: select_fields = comma_separated_parameter_to_list(select_fields_param) data['meta']['selectable_fields'] = {f[0] for f in self.fields.items()} - {f for f in select_fields} return data
def test_comma_separated_parameter_to_list(input, expected): assert comma_separated_parameter_to_list(input) == expected