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