Skip to content

Commit

Permalink
Add project name in all serializers #1524
Browse files Browse the repository at this point in the history
Signed-off-by: tdruez <[email protected]>
  • Loading branch information
tdruez committed Jan 10, 2025
1 parent b683d10 commit d8d0908
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 10 deletions.
10 changes: 10 additions & 0 deletions scanpipe/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ def create(self, validated_data):
class CodebaseResourceSerializer(serializers.ModelSerializer):
for_packages = serializers.JSONField()
compliance_alert = serializers.CharField()
project = serializers.CharField(source="project.name")

class Meta:
model = CodebaseResource
Expand Down Expand Up @@ -379,12 +380,14 @@ class Meta:
"emails",
"urls",
"extra_data",
"project",
]


class DiscoveredPackageSerializer(serializers.ModelSerializer):
purl = serializers.CharField(source="package_url")
compliance_alert = serializers.CharField()
project = serializers.CharField(source="project.name")

class Meta:
model = DiscoveredPackage
Expand Down Expand Up @@ -438,6 +441,7 @@ class Meta:
"missing_resources",
"modified_resources",
"affected_by_vulnerabilities",
"project",
]


Expand All @@ -447,6 +451,7 @@ class DiscoveredDependencySerializer(serializers.ModelSerializer):
resolved_to_package_uid = serializers.ReadOnlyField()
datafile_path = serializers.ReadOnlyField()
package_type = serializers.ReadOnlyField(source="type")
project = serializers.CharField(source="project.name")

class Meta:
model = DiscoveredDependency
Expand All @@ -465,12 +470,14 @@ class Meta:
"datasource_id",
"package_type",
"affected_by_vulnerabilities",
"project",
]


class CodebaseRelationSerializer(serializers.ModelSerializer):
from_resource = serializers.ReadOnlyField(source="from_resource.path")
to_resource = serializers.ReadOnlyField(source="to_resource.path")
project = serializers.CharField(source="project.name")

class Meta:
model = CodebaseRelation
Expand All @@ -480,11 +487,13 @@ class Meta:
"map_type",
"score",
"from_resource",
"project",
]


class ProjectMessageSerializer(serializers.ModelSerializer):
traceback = serializers.SerializerMethodField()
project = serializers.CharField(source="project.name")

class Meta:
model = ProjectMessage
Expand All @@ -496,6 +505,7 @@ class Meta:
"details",
"traceback",
"created_date",
"project",
]

def get_traceback(self, project_error):
Expand Down
6 changes: 4 additions & 2 deletions scanpipe/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,15 +232,17 @@ def packages(self, request, *args, **kwargs):
@action(detail=True, filterset_class=None)
def dependencies(self, request, *args, **kwargs):
project = self.get_object()
queryset = project.discovereddependencies.all()
queryset = project.discovereddependencies.prefetch_for_serializer()
return self.get_filtered_response(
request, queryset, DependencyFilterSet, DiscoveredDependencySerializer
)

@action(detail=True, filterset_class=None)
def relations(self, request, *args, **kwargs):
project = self.get_object()
queryset = project.codebaserelations.all()
queryset = project.codebaserelations.select_related(
"from_resource", "to_resource"
)
return self.get_filtered_response(
request, queryset, RelationFilterSet, CodebaseRelationSerializer
)
Expand Down
6 changes: 4 additions & 2 deletions scanpipe/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -423,8 +423,10 @@ def __init__(self, data=None, *args, **kwargs):
if not data or data.get("is_archived", "") == "":
self.queryset = self.queryset.filter(is_archived=False)

active_count = Project.objects.filter(is_archived=False).count()
archived_count = Project.objects.filter(is_archived=True).count()
counts = Project.objects.get_active_archived_counts()
active_count = counts["active_count"]
archived_count = counts["archived_count"]

self.filters["is_archived"].extra["widget"] = BulmaLinkWidget(
choices=[
("", f'<i class="fa-solid fa-seedling"></i> {active_count} Active'),
Expand Down
12 changes: 12 additions & 0 deletions scanpipe/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,15 @@
from django.core.validators import EMPTY_VALUES
from django.db import models
from django.db import transaction
from django.db.models import Case
from django.db.models import Count
from django.db.models import IntegerField
from django.db.models import OuterRef
from django.db.models import Prefetch
from django.db.models import Q
from django.db.models import Subquery
from django.db.models import TextField
from django.db.models import When
from django.db.models.functions import Cast
from django.db.models.functions import Lower
from django.dispatch import receiver
Expand Down Expand Up @@ -518,6 +520,16 @@ def with_counts(self, *fields):

return self.annotate(**annotations)

def get_active_archived_counts(self):
return self.aggregate(
active_count=Count(
Case(When(is_archived=False, then=1), output_field=IntegerField())
),
archived_count=Count(
Case(When(is_archived=True, then=1), output_field=IntegerField())
),
)


class UUIDTaggedItem(GenericUUIDTaggedItemBase, TaggedItemBase):
class Meta:
Expand Down
11 changes: 6 additions & 5 deletions scanpipe/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -779,6 +779,7 @@ def test_scanpipe_api_project_action_relations(self):
"to_resource": "daglib-0.3.2.tar.gz-extract/daglib-0.3.2/PKG-INFO",
"status": "",
"map_type": "java_to_class",
"project": "Analysis",
"score": "",
"from_resource": "daglib-0.3.2.tar.gz-extract/daglib-0.3.2/PKG-INFO",
}
Expand Down Expand Up @@ -1183,11 +1184,11 @@ def test_scanpipe_api_serializer_get_model_serializer(self):
get_model_serializer(None)

def test_scanpipe_api_serializer_get_serializer_fields(self):
self.assertEqual(49, len(get_serializer_fields(DiscoveredPackage)))
self.assertEqual(14, len(get_serializer_fields(DiscoveredDependency)))
self.assertEqual(37, len(get_serializer_fields(CodebaseResource)))
self.assertEqual(5, len(get_serializer_fields(CodebaseRelation)))
self.assertEqual(7, len(get_serializer_fields(ProjectMessage)))
self.assertEqual(50, len(get_serializer_fields(DiscoveredPackage)))
self.assertEqual(15, len(get_serializer_fields(DiscoveredDependency)))
self.assertEqual(38, len(get_serializer_fields(CodebaseResource)))
self.assertEqual(6, len(get_serializer_fields(CodebaseRelation)))
self.assertEqual(8, len(get_serializer_fields(ProjectMessage)))

with self.assertRaises(LookupError):
get_serializer_fields(None)
8 changes: 7 additions & 1 deletion scanpipe/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,13 @@ class ProjectListView(
Prefetch(
"runs",
queryset=Run.objects.only(
"uuid", "pipeline_name", "project_id", "task_exitcode"
"uuid",
"pipeline_name",
"project_id",
"task_id",
"task_start_date",
"task_end_date",
"task_exitcode",
),
),
]
Expand Down

0 comments on commit d8d0908

Please sign in to comment.