From fcd3b3952ee471fa4acb37b7cba2748f1ccb7fc1 Mon Sep 17 00:00:00 2001 From: Jitka Halova Date: Thu, 21 May 2026 16:57:41 +0200 Subject: [PATCH] Optimize Simple API upload_time and provenance related to #1242, #1243 Assisted By: Claude Opus 4.6 --- pulp_python/app/pypi/views.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pulp_python/app/pypi/views.py b/pulp_python/app/pypi/views.py index b8585df7..e228d88d 100644 --- a/pulp_python/app/pypi/views.py +++ b/pulp_python/app/pypi/views.py @@ -7,7 +7,7 @@ from django.contrib.sessions.models import Session from django.core.exceptions import ObjectDoesNotExist from django.db import transaction -from django.db.models import OuterRef, Subquery +from django.db.models import Exists, F, FilteredRelation, OuterRef, Q from django.db.utils import DatabaseError from django.http.response import ( Http404, @@ -26,7 +26,6 @@ from rest_framework.response import Response from rest_framework.viewsets import ViewSet -from pulpcore.plugin.models import RepositoryContent from pulpcore.plugin.tasking import dispatch from pulpcore.plugin.util import get_domain, get_url from pulpcore.plugin.viewsets import OperationPostponedResponse @@ -368,13 +367,16 @@ def retrieve(self, request, path, package): return redirect(urljoin(self.base_content_url, f"{path}/simple/{normalized}/")) if content is not None: local_packages = content.filter(name_normalized=normalized) - repo_added_subquery = RepositoryContent.objects.filter( - content_id=OuterRef("pk"), - repository=repo_ver.repository, - version_removed=None, - ).values("pulp_created")[:1] packages = local_packages.annotate( - repo_added_time=Subquery(repo_added_subquery) + active_membership=FilteredRelation( + "version_memberships", + condition=Q( + version_memberships__repository=repo_ver.repository, + version_memberships__version_removed=None, + ), + ), + repo_added_time=F("active_membership__pulp_created"), + has_provenance=Exists(PackageProvenance.objects.filter(package_id=OuterRef("pk"))), ).values( "filename", "sha256", @@ -383,9 +385,7 @@ def retrieve(self, request, path, package): "size", "repo_added_time", "version", - ) - provenances = PackageProvenance.objects.filter(package__in=local_packages).values_list( - "package__filename", flat=True + "has_provenance", ) local_releases = { p["filename"]: { @@ -394,7 +394,7 @@ def retrieve(self, request, path, package): "upload_time": p["repo_added_time"], "provenance": ( self.get_provenance_url(normalized, p["version"], p["filename"]) - if p["filename"] in provenances + if p["has_provenance"] else None ), }