Skip to content

Commit fcd3b39

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

1 file changed

Lines changed: 12 additions & 12 deletions

File tree

pulp_python/app/pypi/views.py

Lines changed: 12 additions & 12 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,
@@ -26,7 +26,6 @@
2626
from rest_framework.response import Response
2727
from rest_framework.viewsets import ViewSet
2828

29-
from pulpcore.plugin.models import RepositoryContent
3029
from pulpcore.plugin.tasking import dispatch
3130
from pulpcore.plugin.util import get_domain, get_url
3231
from pulpcore.plugin.viewsets import OperationPostponedResponse
@@ -368,13 +367,16 @@ def retrieve(self, request, path, package):
368367
return redirect(urljoin(self.base_content_url, f"{path}/simple/{normalized}/"))
369368
if content is not None:
370369
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]
376370
packages = local_packages.annotate(
377-
repo_added_time=Subquery(repo_added_subquery)
371+
active_membership=FilteredRelation(
372+
"version_memberships",
373+
condition=Q(
374+
version_memberships__repository=repo_ver.repository,
375+
version_memberships__version_removed=None,
376+
),
377+
),
378+
repo_added_time=F("active_membership__pulp_created"),
379+
has_provenance=Exists(PackageProvenance.objects.filter(package_id=OuterRef("pk"))),
378380
).values(
379381
"filename",
380382
"sha256",
@@ -383,9 +385,7 @@ def retrieve(self, request, path, package):
383385
"size",
384386
"repo_added_time",
385387
"version",
386-
)
387-
provenances = PackageProvenance.objects.filter(package__in=local_packages).values_list(
388-
"package__filename", flat=True
388+
"has_provenance",
389389
)
390390
local_releases = {
391391
p["filename"]: {
@@ -394,7 +394,7 @@ def retrieve(self, request, path, package):
394394
"upload_time": p["repo_added_time"],
395395
"provenance": (
396396
self.get_provenance_url(normalized, p["version"], p["filename"])
397-
if p["filename"] in provenances
397+
if p["has_provenance"]
398398
else None
399399
),
400400
}

0 commit comments

Comments
 (0)