Skip to content

Commit 9e06648

Browse files
committed
Optimize Simple API upload_time and provenance
related to #1242, #1243 Assisted By: Claude Opus 4.6
1 parent 3103926 commit 9e06648

1 file changed

Lines changed: 14 additions & 11 deletions

File tree

pulp_python/app/pypi/views.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from django.contrib.sessions.models import Session
88
from django.core.exceptions import ObjectDoesNotExist
99
from django.db import transaction
10-
from django.db.models import OuterRef, Subquery
10+
from django.db.models import Exists, F, FilteredRelation, OuterRef, Q
1111
from django.db.utils import DatabaseError
1212
from django.http.response import (
1313
Http404,
@@ -368,13 +368,18 @@ def retrieve(self, request, path, package):
368368
return redirect(urljoin(self.base_content_url, f"{path}/simple/{normalized}/"))
369369
if content is not None:
370370
local_packages = content.filter(name_normalized=normalized)
371-
repo_added_subquery = RepositoryContent.objects.filter(
372-
content_id=OuterRef("pk"),
373-
repository=repo_ver.repository,
374-
version_removed=None,
375-
).values("pulp_created")[:1]
376371
packages = local_packages.annotate(
377-
repo_added_time=Subquery(repo_added_subquery)
372+
active_membership=FilteredRelation(
373+
"version_memberships",
374+
condition=Q(
375+
version_memberships__repository=repo_ver.repository,
376+
version_memberships__version_removed=None,
377+
),
378+
),
379+
repo_added_time=F("active_membership__pulp_created"),
380+
has_provenance=Exists(
381+
PackageProvenance.objects.filter(package_id=OuterRef("pk"))
382+
),
378383
).values(
379384
"filename",
380385
"sha256",
@@ -383,9 +388,7 @@ def retrieve(self, request, path, package):
383388
"size",
384389
"repo_added_time",
385390
"version",
386-
)
387-
provenances = PackageProvenance.objects.filter(package__in=local_packages).values_list(
388-
"package__filename", flat=True
391+
"has_provenance",
389392
)
390393
local_releases = {
391394
p["filename"]: {
@@ -394,7 +397,7 @@ def retrieve(self, request, path, package):
394397
"upload_time": p["repo_added_time"],
395398
"provenance": (
396399
self.get_provenance_url(normalized, p["version"], p["filename"])
397-
if p["filename"] in provenances
400+
if p["has_provenance"]
398401
else None
399402
),
400403
}

0 commit comments

Comments
 (0)