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
@@ -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