Skip to content

Commit

Permalink
Add ability to filter by extra_data on list views #1328
Browse files Browse the repository at this point in the history
Signed-off-by: tdruez <[email protected]>
  • Loading branch information
tdruez committed Jul 19, 2024
1 parent 6960aed commit da1c85a
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions scanpipe/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -572,21 +582,14 @@ class Meta:
"is_readme",
"is_top_level",
"is_key_file",
"extra_data",
]

def __init__(self, *args, **kwargs):
super().__init__(*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):
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -725,6 +729,7 @@ class Meta:
"tag",
"is_private",
"is_virtual",
"extra_data",
]


Expand Down Expand Up @@ -863,13 +868,15 @@ 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
fields = [
"search",
"map_type",
"status",
"extra_data",
]

def __init__(self, *args, **kwargs):
Expand Down

0 comments on commit da1c85a

Please sign in to comment.