77from django .contrib .sessions .models import Session
88from django .core .exceptions import ObjectDoesNotExist
99from django .db import transaction
10- from django .db .models import OuterRef , Subquery
10+ from django .db .models import Exists , F , FilteredRelation , OuterRef , Q
1111from django .db .utils import DatabaseError
1212from django .http .response import (
1313 Http404 ,
2626from rest_framework .response import Response
2727from rest_framework .viewsets import ViewSet
2828
29- from pulpcore .plugin .models import RepositoryContent
3029from pulpcore .plugin .tasking import dispatch
3130from pulpcore .plugin .util import get_domain , get_url
3231from pulpcore .plugin .viewsets import OperationPostponedResponse
@@ -363,13 +362,16 @@ def retrieve(self, request, path, package):
363362 return redirect (urljoin (self .base_content_url , f"{ path } /simple/{ normalized } /" ))
364363 if content :
365364 local_packages = content .filter (name__normalize = normalized )
366- repo_added_subquery = RepositoryContent .objects .filter (
367- content_id = OuterRef ("pk" ),
368- repository = repo_ver .repository ,
369- version_removed = None ,
370- ).values ("pulp_created" )[:1 ]
371365 packages = local_packages .annotate (
372- repo_added_time = Subquery (repo_added_subquery )
366+ active_membership = FilteredRelation (
367+ "version_memberships" ,
368+ condition = Q (
369+ version_memberships__repository = repo_ver .repository ,
370+ version_memberships__version_removed = None ,
371+ ),
372+ ),
373+ repo_added_time = F ("active_membership__pulp_created" ),
374+ has_provenance = Exists (PackageProvenance .objects .filter (package_id = OuterRef ("pk" ))),
373375 ).values (
374376 "filename" ,
375377 "sha256" ,
@@ -378,9 +380,7 @@ def retrieve(self, request, path, package):
378380 "size" ,
379381 "repo_added_time" ,
380382 "version" ,
381- )
382- provenances = PackageProvenance .objects .filter (package__in = local_packages ).values_list (
383- "package__filename" , flat = True
383+ "has_provenance" ,
384384 )
385385 local_releases = {
386386 p ["filename" ]: {
@@ -389,7 +389,7 @@ def retrieve(self, request, path, package):
389389 "upload_time" : p ["repo_added_time" ],
390390 "provenance" : (
391391 self .get_provenance_url (normalized , p ["version" ], p ["filename" ])
392- if p ["filename" ] in provenances
392+ if p ["has_provenance" ]
393393 else None
394394 ),
395395 }
0 commit comments