Skip to content

Commit

Permalink
Refine the QuerySet and count Product scoping #138
Browse files Browse the repository at this point in the history
Signed-off-by: tdruez <tdruez@nexb.com>
  • Loading branch information
tdruez committed Aug 2, 2024
1 parent dbc3a54 commit e3d4376
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 19 deletions.
13 changes: 13 additions & 0 deletions component_catalog/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1644,6 +1644,19 @@ def only_rendering_fields(self):
"dataspace__show_usage_policy_in_user_views",
)

def declared_dependencies_count(self, product):
"""
Annotate the QuerySet with this each Package declared_dependencies count.
A ``product`` context need to be provided to get the proper counts as
dependencies are always scoped to a Product.
"""
return self.annotate(
declared_dependencies_count=models.Count(
"declared_dependencies",
filter=models.Q(declared_dependencies__product=product),
)
)


class Package(
ExternalReferenceMixin,
Expand Down
8 changes: 1 addition & 7 deletions product_portfolio/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1323,13 +1323,7 @@ def notify(self, verb, description):


class ProductDependencyQuerySet(ProductSecuredQuerySet):
# TODO: Not properly scoped to product
def with_resolved_to_dependencies_count(self):
return self.annotate(
resolved_to_dependencies_count=models.Count(
"resolved_to_package__declared_dependencies"
)
)
pass


class ProductDependency(HistoryFieldsMixin, DataspacedModel):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@
<tbody class="text-break">
{% for dependency in page_obj.object_list %}
<tr class="{% cycle 'odd' '' %}">
{{ dependency.uuid }}
<td>
{% if dependency.for_package %}
<strong>
Expand All @@ -114,10 +113,10 @@
{% if dependency.resolved_to_package %}
<strong>
<a href="{{ dependency.resolved_to_package.get_absolute_url }}" target="_blank">{{ dependency.resolved_to_package }}</a>
{% if dependency.resolved_to_package.declared_dependencies.all %}
{% if dependency.resolved_to_package.declared_dependencies_count %}
<a class="btn badge text-bg-primary rounded-pill ms-1"
href="{{ product.get_absolute_url }}?dependencies-for_package__uuid={{ dependency.resolved_to_package.uuid }}#dependencies" class="ms-1" data-bs-toggle="tooltip" title="Dependencies" aria-label="Dependencies">
{{ dependency.resolved_to_package.declared_dependencies.all|length }}<i class="fa-solid fa-share-nodes ms-1"></i>
{{ dependency.resolved_to_package.declared_dependencies_count }}<i class="fa-solid fa-share-nodes ms-1"></i>
</a>
{% endif %}
</strong>
Expand Down
15 changes: 6 additions & 9 deletions product_portfolio/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -967,15 +967,12 @@ def get_context_data(self, **kwargs):
context_data = super().get_context_data(**kwargs)
product = self.object

declared_dependencies_prefetch = models.Prefetch(
"resolved_to_package__declared_dependencies",
ProductDependency.objects.product(product),
)

dependency_qs = product.dependencies.prefetch_related(
models.Prefetch("for_package", Package.objects.only_rendering_fields()),
models.Prefetch("resolved_to_package", Package.objects.only_rendering_fields()),
declared_dependencies_prefetch,
models.Prefetch(
"resolved_to_package",
Package.objects.only_rendering_fields().declared_dependencies_count(product),
),
)

filter_dependency = DependencyFilterSet(
Expand All @@ -985,15 +982,15 @@ def get_context_data(self, **kwargs):
prefix="dependencies",
)

filtered_and_annotated_qs = filter_dependency.qs.order_by(
filtered_and_ordered_qs = filter_dependency.qs.order_by(
"for_package__type",
"for_package__namespace",
"for_package__name",
"for_package__version",
"dependency_uid",
)

paginator = Paginator(filtered_and_annotated_qs, self.paginate_by)
paginator = Paginator(filtered_and_ordered_qs, self.paginate_by)
page_number = self.request.GET.get(self.query_dict_page_param)
page_obj = paginator.get_page(page_number)

Expand Down

0 comments on commit e3d4376

Please sign in to comment.