Esempio n. 1
0
 def test_exact_lookup(self):
     label = label_for_filter(Article, 'name', 'exact')
     self.assertEqual(label, 'Title')
Esempio n. 2
0
 def test_field_all_caps(self):
     label = label_for_filter(NetworkSetting, 'cidr', 'contains', exclude=True)
     self.assertEqual(label, 'Exclude CIDR contains')
Esempio n. 3
0
 def test_exclusion_label(self):
     label = label_for_filter(Article, 'name', 'in', exclude=True)
     self.assertEqual(label, 'Exclude title is in')
Esempio n. 4
0
 def test_related_model_exclusion(self):
     label = label_for_filter(Article, 'author__first_name', 'in', exclude=True)
     self.assertEqual(label, 'Exclude author first name is in')
Esempio n. 5
0
 def test_standard_label(self):
     label = label_for_filter(Article, 'name', 'in')
     self.assertEqual(label, 'Title is in')
Esempio n. 6
0
 def test_related_model(self):
     label = label_for_filter(Article, 'author__first_name', 'in')
     self.assertEqual(label, 'Author first name is in')
Esempio n. 7
0
 def test_standard_label(self):
     label = label_for_filter(Article, 'name', 'in')
     self.assertEqual(label, 'Title is in')
Esempio n. 8
0
 def test_related_model(self):
     label = label_for_filter(Article, 'author__first_name', 'in')
     self.assertEqual(label, 'Author first name is in')
Esempio n. 9
0
    def determine_metadata(self, request, view):
        metadata = super().determine_metadata(request, view)

        metadata['transformers'] = AVAILABLE_TRANSFORMERS.keys()
        metadata['workflow_pollers'] = AVAILABLE_POLLERS.keys()

        filters = OrderedDict()
        if not getattr(view, 'filterset_class', None):
            # This route has no filter
            return metadata

        model = view.filterset_class.Meta.model
        for filter_name, filter_type in view.filterset_class.base_filters.items():
            filter_parts = filter_name.split('__')
            filter_name = filter_parts[0]
            attrs = OrderedDict()

            # Type
            attrs['type'] = filter_type.__class__.__name__

            # Lookup fields
            if len(filter_parts) > 1:
                # Has a lookup type (__gt, __lt, etc.)
                lookup_type = filter_parts[1]
                if filters.get(filter_name) is not None:
                    # We've done a filter with this name previously, just
                    # append the value.
                    attrs['lookup_types'] = filters[filter_name]['lookup_types']
                    attrs['lookup_types'].append(lookup_type)
                else:
                    attrs['lookup_types'] = [lookup_type]
            else:
                attrs['lookup_types'] = ['exact']

            # Do choices
            choices = filter_type.extra.get('choices', False)
            if choices:
                attrs['choices'] = [
                    {
                        'value': choice_value,
                        'display_name': force_text(choice_name, strings_only=True)
                    }
                    for choice_value, choice_name in choices
                ]

            # Do queryset
            queryset = filter_type.extra.get('queryset', False)
            to_field = filter_type.extra.get('to_field_name', 'pk')
            if queryset:
                if callable(queryset):
                    queryset = queryset(request)

                attrs['choices'] = [
                    {
                        'value': force_text(getattr(choice, to_field), strings_only=True),
                        'display_name': force_text(choice, strings_only=True)
                    }
                    for choice in queryset
                ]

            label = filter_type.label
            if label is None:
                if model is not None:
                    label = label_for_filter(
                        model,
                        filter_type.field_name,
                        filter_type.lookup_expr,
                        filter_type.exclude
                    )
                else:
                    label = filter_name.replace('_', ' ').title()

            attrs['label'] = label

            # Wrap up.
            filters[filter_name] = attrs

        metadata['filters'] = filters

        if getattr(view, 'ordering_fields', None):
            metadata['ordering'] = view.ordering_fields

        if getattr(view, 'search_fields', None) and len(view.search_fields) > 1:
            metadata['search'] = True

        return metadata
Esempio n. 10
0
 def test_field_all_caps(self):
     label = label_for_filter(NetworkSetting,
                              'cidr',
                              'contains',
                              exclude=True)
     self.assertEqual(label, 'Exclude CIDR contains')
Esempio n. 11
0
 def test_exact_lookup(self):
     label = label_for_filter(Article, 'name', 'exact')
     self.assertEqual(label, 'Title')
Esempio n. 12
0
 def test_related_model_exclusion(self):
     label = label_for_filter(Article,
                              'author__first_name',
                              'in',
                              exclude=True)
     self.assertEqual(label, 'Exclude author first name is in')
Esempio n. 13
0
 def test_exclusion_label(self):
     label = label_for_filter(Article, 'name', 'in', exclude=True)
     self.assertEqual(label, 'Exclude title is in')