11import logging
2+ from itertools import groupby
23
34import sentry_sdk
45from django .conf import settings
@@ -280,13 +281,13 @@ def test_analytics_eu(request, *args, **kwargs):
280281 )
281282 continue
282283
283- repositories = Repository .objects .filter (
284- author = owner , test_analytics_enabled = True
284+ # Only fetch name and repoid fields
285+ repo_id_to_name = dict (
286+ Repository .objects .filter (
287+ author = owner , test_analytics_enabled = True
288+ ).values_list ("repoid" , "name" )
285289 )
286290
287- # Get all repo IDs for this owner
288- repo_id_to_name = {repo .repoid : repo .name for repo in repositories }
289-
290291 if not repo_id_to_name :
291292 test_runs_per_integration [name ] = {}
292293 continue
@@ -296,16 +297,14 @@ def test_analytics_eu(request, *args, **kwargs):
296297 "repo_id" , "-timestamp"
297298 )
298299
300+ # Group by repo_id (data is already ordered by repo_id) and serialize each group
299301 test_runs_per_repository = {}
300- for repo_id , repo_name in repo_id_to_name .items ():
301- test_runs_per_repository [repo_name ] = []
302-
303- serialized_test_runs = TestrunSerializer (test_runs , many = True ).data
304- for test_run_data in serialized_test_runs :
305- repo_id = test_run_data ["repo_id" ]
306- repo_name = repo_id_to_name .get (repo_id )
307- if repo_name :
308- test_runs_per_repository [repo_name ].append (test_run_data )
302+ for repo_id , group in groupby (test_runs , key = lambda tr : tr .repo_id ):
303+ repo_name = repo_id_to_name [repo_id ] # Safe: we only fetch these repo_ids
304+ test_runs_list = list (group )
305+ test_runs_per_repository [repo_name ] = TestrunSerializer (
306+ test_runs_list , many = True
307+ ).data
309308
310309 # Store each test_runs_per_repository in a dictionary
311310 test_runs_per_integration [name ] = test_runs_per_repository
0 commit comments