diff --git a/scanpipe/filters.py b/scanpipe/filters.py index a356a6fea..367dc980a 100644 --- a/scanpipe/filters.py +++ b/scanpipe/filters.py @@ -257,6 +257,14 @@ def filter_queryset(self, queryset): return queryset + @classmethod + def filter_for_lookup(cls, field, lookup_type): + """Add support for JSONField storing "list" using the JSONListFilter.""" + if isinstance(field, models.JSONField) and field.default == list: + return JSONContainsFilter, {} + + return super().filter_for_lookup(field, lookup_type) + def parse_query_string_to_lookups(query_string, default_lookup_expr, default_field): """Parse a query string and convert it into queryset lookups using Q objects.""" @@ -389,6 +397,7 @@ class ProjectFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): field_name="labels__slug", distinct=True, ) + extra_data = django_filters.CharFilter(lookup_expr="icontains") class Meta: model = Project @@ -530,6 +539,7 @@ class ResourceFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): label="Relation map type", field_name="related_from__map_type", ) + extra_data = django_filters.CharFilter(lookup_expr="icontains") class Meta: model = CodebaseResource @@ -572,6 +582,7 @@ class Meta: "is_readme", "is_top_level", "is_key_file", + "extra_data", ] def __init__(self, *args, **kwargs): @@ -579,14 +590,6 @@ def __init__(self, *args, **kwargs): license_expression_filer = self.filters["detected_license_expression"] license_expression_filer.extra["widget"] = HasValueDropdownWidget() - @classmethod - def filter_for_lookup(cls, field, lookup_type): - """Add support for JSONField storing "list" using the JSONListFilter.""" - if isinstance(field, models.JSONField) and field.default == list: - return JSONContainsFilter, {} - - return super().filter_for_lookup(field, lookup_type) - class IsVulnerable(django_filters.ChoiceFilter): def __init__(self, *args, **kwargs): @@ -690,6 +693,7 @@ class PackageFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): ) is_private = StrictBooleanFilter() is_virtual = StrictBooleanFilter() + extra_data = django_filters.CharFilter(lookup_expr="icontains") class Meta: model = DiscoveredPackage @@ -725,6 +729,7 @@ class Meta: "tag", "is_private", "is_virtual", + "extra_data", ] @@ -863,6 +868,7 @@ class RelationFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): ) map_type = django_filters.ChoiceFilter(choices=MAP_TYPE_CHOICES) status = StatusFilter(field_name="to_resource__status") + extra_data = django_filters.CharFilter(lookup_expr="icontains") class Meta: model = CodebaseRelation @@ -870,6 +876,7 @@ class Meta: "search", "map_type", "status", + "extra_data", ] def __init__(self, *args, **kwargs):