From 4d34ecef98a2da4a30398e4d1d3f33e2bc596e49 Mon Sep 17 00:00:00 2001 From: tdruez Date: Thu, 23 May 2024 09:33:06 +0400 Subject: [PATCH] Add tag as a ChoiceFilter on the ResourceFilterSet #1217 Signed-off-by: tdruez --- scanpipe/filters.py | 18 +++++++++--------- scanpipe/views.py | 5 ++++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/scanpipe/filters.py b/scanpipe/filters.py index b4f2cf70b..ca3cc2fc4 100644 --- a/scanpipe/filters.py +++ b/scanpipe/filters.py @@ -476,6 +476,7 @@ class ResourceFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): dropdown_widget_fields = [ "status", "type", + "tag", "compliance_alert", "in_package", "relation_map_type", @@ -509,6 +510,7 @@ class ResourceFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): ) in_package = InPackageFilter(label="In a package") status = StatusFilter() + tag = django_filters.ChoiceFilter() relation_map_type = RelationMapTypeFilter( label="Relation map type", field_name="related_from__map_type", @@ -556,14 +558,14 @@ class Meta: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if status_filter := self.filters.get("status"): - status_filter.extra.update( - { - "choices": status_filter.get_status_choices( - self.queryset, include_any=True - ) - } + status_filter.extra["choices"] = status_filter.get_status_choices( + self.queryset, include_any=True ) + tags = self.queryset.order_by("tag").values_list("tag", flat=True).distinct() + tag_choices = [(tag, tag) for tag in tags if tag] + self.filters["tag"].extra["choices"] = tag_choices + license_expression_filer = self.filters["detected_license_expression"] license_expression_filer.extra["widget"] = HasValueDropdownWidget() @@ -838,6 +840,4 @@ def __init__(self, *args, **kwargs): if project: status_filter = self.filters.get("status") qs = CodebaseResource.objects.filter(project=project) - status_filter.extra.update( - {"choices": status_filter.get_status_choices(qs)} - ) + status_filter.extra["choices"] = status_filter.get_status_choices(qs) diff --git a/scanpipe/views.py b/scanpipe/views.py index f58e79baa..0d1a33e65 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -1384,7 +1384,10 @@ class CodebaseResourceListView( "extension", "programming_language", "mime_type", - "tag", + { + "field_name": "tag", + "filter_fieldname": "tag", + }, { "field_name": "detected_license_expression", "filter_fieldname": "detected_license_expression",